glob

GLOB(7)                     Linux Programmer's Manual                    GLOB(7)



NOME
       glob - Fare il globbing dei percorsi dei file

DESCRIZIONE
       Molto tempo fa, in UNIX V6, c'era un programma /etc/glob che espandeva i
       modelli di metacaratteri.  Poco dopo venne incorporato nella shell.

       Al giorno d'oggi c'è anche una routine di libreria glob(3) che svolge la
       stessa funzione per un programma utente.

       Le regole sono le seguenti (POSIX.2, 3.13).

   Corrispondenze di metacaratteri
       Una stringa è un modello di metacaratteri se contiene uno dei caratteri
       '?', '*aq o '[aq.  Il globbing è l'operazione che espande un modello di
       metacaratteri in un elenco di percorsi che corrisponde al modello.  Una
       corrispondenza è definita da:

       Un '?' (non fra virgolette) corrisponde ad un carattere singolo.

       Un '*' (non fra virgolette) corrisponde a qualsiasi stringa, compresa
       quella vuota.

       Classi di carattere

       Un'espressione nella forma "[...]", in cui il primo carattere dopo la '['
       iniziale non è un '!' corrisponde ad un carattere singolo, cioè a
       qualsiasi carattere fra quelli racchiusi tra le parentesi.  La stringa
       tra le parentesi non può essere vuota; perciò è possibile avere una ']'
       fra parentesi, purché essa sia il primo carattere (perciò "[][!]"
       corrisponde ai tre caratteri '[', ']' e '!').

       Intervalli

       C'è una convenzione speciale: due caratteri separati da '-' indicano un
       intervallo (perciò "[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 (perciò "[]-]" corrisponde solo ai
       due caratteri ']' e '-', e "[--0]" corrisponde ai tre caratteri '-', '.',
       '0', dato che '/' non ha corrispondenze).

       Complementazione

       Un'espressione "[!...]" corrisponde ad un carattere singolo, cioè a
       qualsiasi carattere cui non corrisponda l'espressione ottenuta rimuovendo
       il '!' iniziale (perciò "[!]a-]" corrisponde a qualsiasi carattere
       singolo eccetto ']', 'a' e '-'.).

       Si può rimuovere il significato speciale di '?', '*' e '[' facendoli
       precedere da una backslash, o, nel caso l'espressione sia parte di una
       riga di comando della shell, ponendoli fra virgolette doppie.  Fra
       parentesi quadre questi caratteri hanno un significato letterale.  Perciò
       "[[?*\]" corrisponde ai quattro caratteri '[', '?', '*' e '\'.

   Percorsi
       Il globbing si applica separatamente a ogni componente di un percorso.  A
       uno '/' in un percorso non può corrispondere uno dei metacaratteri '?' o
       '*', né un intervallo come "[.-0]".  Un intervallo contenente un
       carattere '/' esplicito è sintaticamente scorretto. (POSIX richiede che i
       modelli sintaticamente scorretti siano lasciati immodificati.)

       Se il nome di un file inizia con un '.', deve esserci una corrispondenza
       esplicita per il '.' (perciò rm * non rimuove .profile, e tar c * non
       archivia tutti i file: tar c . è meglio).

   Elenchi vuoti
       La chiara e semplice regola precedente: "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 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 con questo comando:

           shopt -s nullglob

       (Problemi simili accadono in altri casi.  Per esempio, mentre script
       vecchi usano

           rm `find . -name "*~"`

       per uno script nuovo bisogna usare

           rm -f nosuchfile `find . -name "*~"`

       per evitare messaggi 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; inoltre le convenzioni non sono le stesse: per
       esempio, '*' in un'espressione regolare significa zero o più copie di
       quanto precede.

       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 internazionalizzazione
       Naturalmente gli intervalli erano originariamente interpretati 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 denoti l'insieme
       di caratteri i cui codici sono compresi fra il codice di X e quello di Y.
       Comunque 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:
       vale a dire (i) la negazione, (ii) caratteri singoli espliciti e (iii)
       intervalli.  POSIX definisce gli intervalli in un modo internazionalmente
       più utile e aggiunge altri tre tipi:

       (iii) Intervalli del tipo X-Y che includono tutti i caratteri compresi
       tra X e Y (inclusi) nella sequenza di collazione definita dalla categoria
       LC_COLLATE nella localizzazione corrente.

       (iv) Classi di carattere con nome, come

       [: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 'z'.  Queste classi di carattere sono
       definite dalla categoria LC_CTYPE nella localizzazione corrente.

       (v) Elementi di collazione, come "[.ch.]" o "[.a-acute.], in cui la
       stringa compresa fra "[." e ".]" è un elemento di collazione definito
       dalla localizzazione corrente.  Si noti che questo può essere un elemento
       composto da più caratteri.

       (vi) Una classe di equivalenza, come "[=a=]", in cui la stringa compresa
       tra "[=" e "=]" è un qualsiasi elemento di collazione nella sua classe di
       equivalenza, come definita dalla localizzazione corrente.  Per esempio,
       "[[=a=]]" potrebbe essere equivalente a "[aáàäâ]", cioè a "[a[.a-
       acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]".

VEDERE ANCHE
       sh(1), fnmatch(3), glob(3), locale(7), regex(7)

COLOPHON
       Questa pagina fa parte del rilascio 4.08 del progetto Linux man-pages.
       Una descrizione del progetto, le istruzioni per la segnalazione degli
       errori, e l'ultima versione di questa pagina si trovano su
       https://www.kernel.org/doc/man-pages/.

       La versione italiana fa parte del pacchetto man-pages-it v. 4.08, a cura
       di: ILDP "Italian Linux Documentation Project" http://www.pluto.it/ildp
       Per la traduzione in italiano si può fare riferimento a
       http://www.pluto.it/ildp/collaborare/
       Segnalare eventuali errori di traduzione a ildp@pluto.it



Linux                              2016-10-08                            GLOB(7)