Split di una stringa in Bash

Mi è capitato di dover processare una lista di nomi di file e scomporre ogni nome in 2 parti, nome ed estensione.
Ovviamente ci sono diversi modi per farlo, io ho usato questo.

La scomposizione si attiva con la sintassi ${}, all’interno delle parentesi graffe inserire il nome della variabile da separare in due.
Questo un banale esempio, che se lanciato parlerà più di mille spiegazioni! ...beh ...quasi!

 

#!/bin/bash
STRINGA="alfa.bravo.charlie.delta";
UNO=${STRINGA%.*};
DUE=${STRINGA%%.*};
TRE=${STRINGA#*.};
QUATTRO=${STRINGA##*.};
echo $UNO;
echo $DUE;
echo $TRE;
echo $QUATTRO;

%.* seleziona la parte della variabile che va dall’inizio alla prima occorrenza del separatore (in questo caso il punto).
#.* seleziona la parte della variabile che va dall'ultimo carattere alla prima occorrenza del separatore, a ritroso.
Questo comportamento è detto lazy, se invece si vuole utilizzare una selezione di tipo greedy bisogna usare un doppio simbolo di percentuale o cancelletto a seconda dei casi.
La selezione lazy (=svogliata) invece si ferma non appena trova il primo separatore utile.
La selezione greedy (=avida) va a cercare il separatore più lontano dall’inizio della stringa.