Provided by: manpages-it_2.80-3_all bug

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 metacaretteri.  Poco dopo divenne parte della shell.

       Al giorno d'oggi c'e 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 metacaratteri
       Una stringa e un modello di metacaratteri se contiene uno dei caratteri
       `?', `*' o `['. Il globbing e l'operazione che espande  un  modello  di
       metacaratteri  in un elenco di percorsi che corrisponde al modello. Una
       corrispondenza e 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  della  forma  `[...]', dove il primo caratttere dopo la
       `[' iniziale non e un `!', corrisponde ad un carattere singolo, cioe  a
       qualsiasi  carattere  fra quelli racchiusi tra le parentesi. La stringa
       nelle parentesi non puo essere vuota; percio e possibile avere una  `]'
       fra  parentesi,  purche  essa  sia  il primo carattere (ad es., `[][!]'
       corrisponde ai tre caratteri `[', `]' e `!').

       Intervallo

       C'e una convenzione speciale: due caratteri separati da `-' indicano un
       intervallo       (ad       es.,      `[A-Fa-f0-9]'      equivale      a
       `[ABCDEFabcdef0123456789]').   Si  puo  includere  un   `-'   col   suo
       significato  letterale  ponendolo  al  primo  o all'ultimo posto fra le
       parentesi (ad es. `[]-]' corrisponde solo ai due caratteri `]'  e  `-',
       `[--0]'  corrisponde  ai tre caratteri `-', `.', `0', mentre `/' non ha
       corrispondenze.)

       Complementazione

       Un'espressione `[!...]' corrisponde ad un  carattere  singolo,  cioe  a
       qualsiasi   carattere   cui   non  corrisponda  l'espressione  ottenuta
       rimuovendo il `!' iniziale (per es.,  `[!]a-]' corrisponde a  qualsiasi
       carattere singolo eccetto `]', `a' e `-').

       Si puo togliere il significato speciale di  `?', `*' e `[' precedendoli
       con un 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 `\'.

   Percorsi
       Il globbing e applicato separatamente a ogni componente di un percorso.
       A uno '/' di un percorso non puo corrispondere  uno  dei  metacaratteri
       `?'  o  `*',  ne  un  intervallo  come  `[.-0]'.  Un intervallo non puo
       contenere uno '/' esplicito: cio risulterebbe in un errore di sintassi.

       Se  il  nome  di  un  file  inizia  con  un  `.',  deve   esserci   una
       corrispondenza esplicita per il `.'. Per es., `rm *' non rimuove

   Elenchi vuoti
       La  chiara  e  semplice  regola di piu 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 in
            xv -wait 0 *.gif *.jpg
       quando, magari, non c'e nessun  file  *.gif  (e  questo  non  causa  un
       errore).   D'altra parte POSIX richiede che un modello di metacaratteri
       non venga modificato se e sintatticamente sbagliato o se la  lista  dei
       percorsi   corrispondenti   e  vuota.   Con  bash  si  puo  forzare  il
       comportamento classico ponendo 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 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 piu copie
       della cosa precedente.

       Ora che le espressioni regolari usano espressioni fra parentesi  quadre
       in  cui  la  negazione  e  indicata  con  un  `^',  POSIX ha dichiarato
       indefinito l'effetto di un modello come `[^...]'.

   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, cio richiede che l'utente conosca la codifica
       usata sul sistema locale, e, inoltre, non e comodo quando  la  sequenza
       di collazione per l'alfabeto locale e diversa dall'ordine dei codici di
       carattere.  Percio  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 piu utile e aggiunge altri
       tre tipi:

       (iii) Intervalli del tipo X-Y  includono  tutti  i  caratteri  (estremi
       inclusi) compresi tra X e Y 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 zeta. Queste classi di carattere sono
       definite dalla categoria LC_CTYPE nella localizzazione corrente.

       (v)  Elementi di collazione, come <<[.ch.]>> o <<[.a-acute.]>>, dove la
       stringa compresa fra <<[.>>  e  <<.]>>  e  un  elemento  di  collazione
       definito  dalla  localizzazione corrente. Si noti che questo puo essere
       un elemento composto da piu caratteri.

       (vi) Una  classe  di  equivalenza,  come  <<[=a=]>>,  dove  la  stringa
       compresa  tra  <<[=>>  e  <<=]>>  e un qualsiasi elemento di collazione
       nella  sua  classe  di  equivalenza,  definita   dalla   localizzazione
       corrente.  Per  esempio,  <<[[=a=]]>>  potrebbe  essere  equivalente  a
       <<[aaaaa]>>, (attenzione: questo e Latin-1) cioe a  <<[a[.a-acute.][.a-
       grave.][.a-umlaut.][.a-circumflex.]]>>.

VEDERE ANCHE

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