GNU/Linux: espansione delle parentesi in Bash

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