|
|||||||
|
|
GLOBSection: Linux Programmer's Manual (7)Updated: 12 giugno 1998 Index Return to Main Contents NOMEglob - Globbare i percorsi dei fileDESCRIZIONEMolto tempo fa, in Unix V6, c'era un programma /etc/glob che espandeva i modelli di metacaretteri. Poco dopo divenne parte della shell.Al giorno d'oggi c'è pure una routine di libreria glob(3) per svolgere un simile compito a vantaggio dei programmi utenti. Le regole sono le seguenti (POSIX 1003.2, 3.13). CORRISPONDENZE DI METACARATTERIUna stringa è un modello di metacaratteri se contiene uno dei caratteri `?', `*' o `['. Globbare è l'operazione che espande un modello di metacaratteri in un elenco di percorsi che corrisponde al modello. Una corrispondenza è definita da:Un `?' (non fra parentesi) corrisponde ad un carattere singolo. Un `*' (non fra parentesi) corrisponde a qualsiasi stringa, compresa quella vuota. Classi di CarattereUn'espressione della forma `[...]', dove il primo caratttere dopo la `[' iniziale non è un `!', corrisponde ad un carattere singolo, cioè a qualsiasi carattere fra quelli racchiusi tra le parentesi. La stringa nelle parentesi non può essere vuota; perciò è possibile avere una `]' fra parentesi, purché essa sia il primo carattere (ad es., `[][!]' corrisponde ai tre caratteri `[', `]' e `!').SerieUna convenzione speciale: due caratteri separati da un `-' indicano una serie (ad es., `[A-Fa-f0-9]' equivale a `[ABCDEFabcdef0123456789]'). Si può includere un `-' col suo significato letterale ponendolo al primo o all'ultimo posto fra le parentesi (ad es. `[]-]' corrisponde solo ai due caratteri `]' e `-', mentre `[--/]' corrisponde ai tre caratteri `-', `.', `/').ComplementazioneUn espressione `[!...]' corrisponde ad un carattere singolo, cioè a qualsiasi carattere cui non corrisponda l'espressione ottenuta rimuovendo il `!' iniziale (per es., `[!]a-]' corrisponde a qualsiasi carattere singolo eccetto `]', `a' e `-').Si può togliere a `?', `*' e `[' il loro significato speciale precedendoli con uno backslash, o, nel caso l'espressione sia parte di una riga di comando della shell, ponendola fra virgolette doppie. Fra parentesi quadre questi caratteri hanno un significato letterale. Per es., `[[?*\]' corrisponde ai quattro caratteri `[', `?', `*' e `\'. PERCORSIOgni componente di un percorso viene globbata separatamente. A uno '/' di un percorso non può corrispondere una dei metacaratteri `?' o `*', né una serie come `[.-0]'. Una serie non può contenere uno '/' esplicito: ciò risulterebbe in un errore di sintassi.Se il nome di un file inizia con un `.', deve esserci una corrispondenza esplicitamente per il `.'. Per es., `rm *' non rimuove LISTE VUOTE
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 liste vuote, come in
xv -wait 0 *.gif *.jpg
quando, 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
IR allow_null_glob_expansion=true .
(Problemi simili accadono in altri posti. Per es., mentre script
vecchi usano
rm `find . -name "*~"`
per uno script nuovo bisogna usare
rm -f `find . -name "*~"`
per evitare messagi di errore di
rm
invocato con una lista vuota di argomenti)
NOTEEspressioni regolariSi 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.Ora che le espressioni regolari usano espressioni fra parentesi quadre in cui la negazione è indicata con un `^', POSIX ha dichiarato indefinito l'effetto di un modello come `[^...]'. Classi di carattere e internazionalizzazioneNaturalmente le serie erano originariamente interpretate come serie ASCII, per cui `[ -%]' stava per `[ !"#$%]' e `[a-z]' per «una qualsiasi minuscola». Alcune implementazioni Unix hanno generalizzato questo comportamento in modo tale che la serie 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: 1. una negazione 2. un esplicito carattere singolo 3. una serie. POSIX definisce le serie in un modo internazionalmente più utile e aggiunge altri tre tipi:4.
Index | ||||||
|
|
|
Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account Document on this page is part of "Linuxinfor Man Pages in HTML Format: man7". See Index Page for more info about Authorship and Copyright. 1999-2008 Linuxinfor.com. No rights reserved. |