Guida avanzata di scripting Bash: Un'approfondita esplorazione dell'arte dello scripting di shell | ||
---|---|---|
Indietro | Capitolo 17. Espressioni Regolari | Avanti |
Bash, di per sé, non è in grado di riconoscere le Espressioni Regolari. Negli script, sono i comandi e le utility -- come sed e awk -- che interpretano le ER.
Bash, invece, esegue l'espansione del nome del file [1] -- un processo conosciuto come "globbing" -- che, però, non usa la serie standard di caratteri delle ER, ma riconosce ed espande i caratteri jolly. Il globbing interpreta i caratteri jolly standard * e ?, liste di caratteri racchiuse tra parentesi quadre ed alcuni altri caratteri speciali (come ^, che nega il senso di una ricerca). Esistono, tuttavia, alcune importanti limitazioni nell'impiego dei caratteri jolly. Stringhe che contengono l'* non verificano i nomi dei file che iniziano con un punto, come, ad esempio, .bashrc. [2] In modo analogo, il ? ha un significato diverso da quello che avrebbe se impiegato in una ER.
bash$ ls -l total 2 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt bash$ ls -l t?.sh -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh bash$ ls -l [ab]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 bash$ ls -l [a-c]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 bash$ ls -l [^ab]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt bash$ ls -l {b*,c*,*est*} -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt |
Bash esegue l'espansione del nome del file sugli argomenti passati da riga di comando senza il quoting. Il comando echo dimostra questa funzionalità.
bash$ echo * a.1 b.1 c.1 t2.sh test1.txt bash$ echo t* t2.sh test1.txt |
È possibile modificare il modo in cui Bash interpreta
i caratteri speciali nel globbing. Il comando set -f
disabilita il globbing e shopt,
con le opzioni |
Vedi anche Esempio 10-4.
[1] | Espansione del nome del file significa completare un nome di file che contiene caratteri speciali. Per esempio, esempio.??? potrebbe espandersi a esempio.001 e/o esempio.txt. | |
[2] | L'espansione del nome del file può verificare i nomi di file che iniziano con il punto, ma solo se il modello lo include esplicitamente con il suo valore letterale.
|