table of contents
other languages
other sections
GLOB(7) | Linux Programmer's Manual | GLOB(7) |
NOME¶
glob - Fare il globbing dei percorsi dei fileDESCRIZIONE¶
Molto tempo fa, in Unix V6, c'era un programma /etc/glob che espandeva i modelli di metacaretteri. Poco dopo divenne parte della shell.Corrispondenze di metacaratteri¶
Una stringa è un modello di metacaratteri se contiene uno dei caratteri `?', `*' o `['. Il globbing è l'operazione che espande un modello di metacaratteri in un elenco di percorsi che corrisponde al modello. Una corrispondenza è definita da:Percorsi¶
Il globbing è applicato separatamente a ogni componente di un percorso. A uno '/' di un percorso non può corrispondere uno dei metacaratteri `?' o `*', né un intervallo come `[.-0]'. Un intervallo non può contenere uno '/' esplicito: ciò risulterebbe in un errore di sintassi.Elenchi vuoti¶
La chiara e semplice regola di più sopra: «espandere un modello di metacaratteri in un elenco di percorsi che corrisponde al modello» era la definizione originale di Unix. Permetteva modelli che si espandevano in elenchi vuoti, come inxv -wait 0 *.gif *.jpgquando, magari, non c'è nessun file *.gif (e questo non causa un errore). D'altra parte POSIX richiede che un modello di metacaratteri non venga modificato se è sintatticamente sbagliato o se la lista dei percorsi corrispondenti è vuota. Con bash si può forzare il comportamento classico ponendo allow_null_glob_expansion=true.
rm `find . -name "*~"`per uno script nuovo bisogna usare
rm -f nosuchfile `find . -name "*~"`per evitare messagi di errore di rm invocato con un elenco vuoto di argomenti)
NOTE¶
Espressioni regolari¶
Si noti che i modelli di metacaratteri non sono espressioni regolari, per quanto si assomiglino. Prima di tutto corrispondono a nomi di file piuttosto che a testo, e poi le convenzioni non sono le stesse: per esempio, `*' in un'espressione regolare vuol dire zero o più copie della cosa precedente.Classi di carattere e internazionalizzazione¶
Naturalmente gl'intervalli erano originariamente interpretate come intervalli ASCII, per cui `[ -%]' stava per `[ !"#$%]' e `[a-z]' per «una qualsiasi minuscola». Alcune implementazioni Unix hanno generalizzato questo comportamento in modo tale che l'intervallo X-Y denota l'insieme di caratteri i cui codici sono compresi fra i codici di X e Y. D'altra parte, ciò richiede che l'utente conosca la codifica usata sul sistema locale, e, inoltre, non è comodo quando la sequenza di collazione per l'alfabeto locale è diversa dall'ordine dei codici di carattere. Perciò POSIX ha notevolmente esteso la notazione parentetica, sia per i modelli di metacaratteri che per le espressioni regolari. Prima abbiamo visto tre tipi di argomenti che possono apparire in un'espressione parentetica: (i) una negazione (ii) caratteri singoli espliciti e (iii) intervalli. POSIX definisce gl'intervalli in un modo internazionalmente più utile e aggiunge altri tre tipi:[:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]in modo da poter dire «[[:lower:]]» al posto di «[a-z]» e ottenere il risultato corretto anche in danese, dove ci sono tre lettere nell'alfabeto che vengono dopo la zeta. Queste classi di carattere sono definite dalla categoria LC_CTYPE nella localizzazione corrente.
VEDERE ANCHE¶
sh(1), fnmatch(3), glob(3), locale(7), regex(7)24 agosto 2003 | Unix |