Brace expansion

Rispondo qui ad una richiesta di aiuto che ho ricevuto la scorsa settimana e a cui non ho sino ad ora avuto il tempo di rispondere. Mi viene richiesto un consiglio su uno script in bash che processa una serie di directory e ne crea temporaneamente altre in /tmp. Senza scendere nei dettagli del caso specifico, per generare automaticamente liste o array di directory ci viene in aiuto la brace expansion. Si tratta di un particolare meccanismo di bash con cui è possibile generare elenchi arbitrari di nomi di file o directory. In questo senso è simile alla pathname expansion, anche se quest’ultima è vincolata all’esistenza del file e/o della directory in questione, mentre con brace expansion questo limite non è previsto.

La sintassi delle brace expansion è molto semplice e prevede che vengano elencate tra parentesi graffe stringa che verranno sostituite nella medesima posizione all’interno stringa principale, generando così le varianti che ci servono. Come sempre, un esempio pratico vale più di mille spiegazioni:

a{b,c,d}e

si espande in:

  • abe
  • ace
  • ade

La brace expansion ha priorità su tutte le altre expansion e deve contenete parentesi graffe di apertura e chiusura e almeno un separatore (virgola).

Ecco dunque la riga di codice mancante allo script di cui sopra:

/bin/mkdir /tmp/{dir_main,dir_all,dir_tmp_1,dir_tmp_2,dir_tmp_3}

Condivido

Leave a comment