L’espansione delle parentesi graffe, in inglese brace expansion, è un meccanismo molto comodo di Bash che ci permette di generare sequenze di stringhe arbitrarie. Di solito viene considerata una tecnica basilare e nessuno se ne occupa, eppure è importantissima: torna utile in un sacco di occasioni e ci servirà come mattoncino per cose più complicate. In questo articolo la vediamo da zero.
Il primo esempio
Il comando echo prende gli argomenti che gli diamo e li riproduce a terminale. Se in un argomento inseriamo una coppia di parentesi graffe con una lista di elementi separati da virgole, Bash genera una stringa per ogni elemento:
echo file.{txt,bak}
L’output è questo:
file.txt file.bak
Ogni elemento della lista è stato usato per costruire una nuova stringa, con il prefisso “file.” davanti. Naturalmente funziona con qualsiasi stringa e con qualsiasi lista. Se nel testo vogliamo uno spazio dobbiamo proteggerlo con il backslash:
echo Ciao\ {Mario,Luca}
L’output sono due stringhe:
Ciao Mario Ciao Luca
In sostanza una brace expansion ben strutturata comprende una parentesi graffa aperta, una lista separata da virgole e una parentesi graffa chiusa.
Le sequenze
Oltre alla lista separata da virgole possiamo inserire una serie. Se dobbiamo generare dei nomi di file numerati, invece di scrivere tutti i numeri da 1 a 6 usiamo al posto della virgola l’operatore sequenza, cioè il doppio punto:
echo file{1..6}
L’output è:
file1 file2 file3 file4 file5 file6
Per ottenere un incremento diverso da uno si aggiunge un secondo doppio punto seguito dal passo. Qui il doppio punto finale non è più il qualificatore di range, ma quello di incremento:
echo file{1..6..2}
Vengono generati soltanto i nomi con i numeri 1, 3 e 5:
file1 file3 file5
Le sequenze non sono solo numeriche: funzionano anche con le lettere. Qui andiamo da a a e, di nuovo con passo due:
echo {a..e..2}
L’output è:
a c e
Con il passo uno (o senza passo) si ottengono tutte le lettere da a a e:
echo {a..e}
L’output è:
a b c d e
A cosa serve
Basta immaginare le occasioni in cui dobbiamo generare liste o sequenze di stringhe: nomi di file, nomi di cartelle, letteralmente qualunque cosa. Si scrive la lista una volta sola e Bash fa il resto.
Chiusura
Questo era un attrezzo da mettere nella cassetta degli attrezzi: ci tornerà utile quando vedremo cose più complicate, e non lo rispiegheremo di nuovo. Il video dice che nei prossimi episodi affronteremo l’espansione di parametro, quella di tilde, quella dei nomi di file e alcune altre tecniche base di Bash. Aprite la vostra Linux box e sperimentate: è una tecnica semplice ma molto potente.
Link e risorse
- il video su YouTube
- esempi e comandi della puntata su GitHub
- Manuale di Bash (man page) — in italiano
- Brace expansion, Wooledge wiki — liste, sequenze e trabocchetti
- BashGuide — la guida di riferimento per imparare Bash
- Bash, Wikipedia — in italiano
