2.3. Modelli di occorrenza del tipo shell (shell pattern)

2.3.1. I caratteri con significato speciale

Frequenti:

*Nessuno o qualsiasi altro carattere
?Un carattere qualsiasi
[ ]Delimitatori di possibili caratteri nella posizione di un carattere
^ o !Ponendo dentro [ ] dopo [ uno dei due caratteri farà funzionare la delimitazione facendo valere l'opposto
-Si possono introdurre dentro [ ] singoli trattini per descrivere delle serie di caratteri

Meno frequenti:

{ }Come [ ] ma per delimitare un elenco, separato da virgole, di caratteri in successione

Di interpretazione:

\ Informa che il seguente carattere non deve essere interpretato come speciale

Caratteri che possono richiedere \: \, $, %, #, ^, ?, [, ], |, !, *; fuori da virgolette per: lo spazio, &, <, >, {, };

2.3.2. Problemi di interpretazione

Visto la compresenza di differenti modi di costituzione di modelli di occorrenza nell'interazione con la shell e l'estensione del problema per alcune direttive offerte da una shell[1] è bene sapere come evitare interferenze, i caratteri speciali sono interpretati in primo luogo dalla shell, nel caso questi non siano utili a trovare occorrenze con i nomi di file della directory corrente allora l'interpretazione passa al programma richiesto, per evitare dunque la sostituzione della shell nei casi in cui avverrebbe si può utilizzare la sbarra \ oppure le virgolette 'modello' (forma preferibile; nella tastiera italiana l'apostrofo sotto il punto interrogativo) o “modello”. Esempio:

voltaire:/ # locate ?
/
voltaire:/ # locate \?  
/
voltaire:/ # locate '\?'
voltaire:/ #

Nella prima richiesta la shell cerca un nome di file nella directory corrente dalle dimensioni di un carattere soltanto e non trovandolo ha passato ? a locate così assumendo lo stesso valore della seconda richiesta, qui viene trovata l'unica occorrenza possibile, con il punto di partenza del file system principale, nella terza richiesta non c'è nessuna occorrenza poiché non esistono nomi di file con ?.

2.3.3. Esemplificazione

* e ?

find / -iname '??????????'

find va ad occorrere con tutti i nomi di file trovati con una lunghezza di 10 caratteri.

ls *.???

Occorre con tutti (*) i nomi di file presenti che hanno dopo il punto tre caratteri (???) e quindi visualizza con ls.

[ ]

*[0-9]

Occorre con ciò che termina con un valore numerico qualsiasi.

*[0-1][0-9]

Occorre con ciò che termina con una numero inferiore a 20 (01, 02, 03...).

[^Ll]eggimi

Può occorrere con Reggimi o reggimi, ma non deve essere Leggimi o leggimi

[a-zA-Z]* (valido meno volte [a-Z])

Occorre con ciò che inizia con una lettera dell'alfabeto, sia maiuscola che minuscola.

*[a-dJQ-Z]

Occorre con ciò che termina con: una lettera che va da a a d, J, una lettera che va da Q a Z.

[a-d]*[a-d]?

Occorre con ciò che inizia con una lettera che va da a a d, seguita da qualsiasi carattere in qualsiasi quantità, ma che deve terminare con una lettera che va da a a d più un carattere qualsiasi.

{ }

ls *.{html,sgml}

Occorre con tutti i file terminanti con .html e .sgml.

\

\[abc\]*

Occorre con tutto ciò che inizia con [abc].

'##*'(oppure: \#\#*)

Occorre con ciò che inizia con ##.

Note

[1]

Ad esempio $ che all'inizio di una parola identifica una variabile di shell, un esempio: # echo $PATH