si usano 3 operatori per namipolare le stringhe:

minimali:
se si usano le espressioni regolari per indicare la sottostringa (da eliminare o sostituire) verrà individuata in caso di ambiguità la sottostringa più piccola (o solo la prima nel caso della sostituzione).

massimali:
cercano di individuare la sottostringa più grande che corrisponde all'espressioni regolari (nel caso del modificatore // tutte le sottostringhe vengono sostituite)

esempio:
VAR="questa.sarebbe.una.stringa.di.esempio"

echo ${VAR#*.} → sarebbe.una.stringa.di.esempio
echo ${VAR##*.} → esempio

echo ${VAR%.*} → questa.sarebbe.una.stringa.di
echo ${VAR%%.*} → questa

echo ${VAR/st/ST} → queSTa.sarebbe.una.stringa.di.esempio
echo ${VAR//st/ST} → queSTa.sarebbe.una.STringa.di.esempio

esempio: ciclo che modifica le estensioni dei file
for f in *.txt
do

mv "$f" "${f/%txt/log}"
done