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.