Provided by: manpages-it_4.15.0-9_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
       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 '?', '*' o '['. 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 sianolasciati 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á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 5.13 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/.

TRADUZIONE

       La traduzione italiana di questa pagina di manuale è stata  creata  da  Ottavio  G.  Rizzo
       <rizzo@pluto.linux.it>,  Giulio Daprelà <giulio@pluto.it>, Elisabetta Galli <lab@kkk.it> e
       Marco Curreli <marcocurreli@tiscali.it>

       Questa traduzione è documentazione libera; leggere la GNU General Public License  Versione
       3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ o successiva per le condizioni di copyright.
       Non ci assumiamo alcuna responsabilità.

       Per segnalare errori nella traduzione di questa pagina di manuale inviare un  messaggio  a
       ⟨pluto-ildp@lists.pluto.it⟩.