Полезно при написании скриптов на bash, которые конвертят и/или переносят файлы.
Имеется полное имя файла. Как извлечь разные его компоненты (отдельно путь, имя с раширением, имя без расширения, отдельно расширение)
foo=/tmp/my.dir/filename.tar.gz
path = ${foo%/*}
file = ${foo##*/}
base = ${file%%.*}
ext = ${file#*.}
При этом получается следующее:
path=/tmp/my.dir
file=filename.tar.gz
base=filename
ext=tar.gz
Первые два выражения аналогичны командам dirname и basename соответственно.
источник