Это также работает в Bash и описано здесь :
$ {string ## substring}
Удаляет самое длинное совпадение $ substring с фронта$ string.
*
- это подстановочный знак, который означает совпадение с чем угодно.Ваш пример удаляет путь из файла, а не расширение.
$ bazfile='/foo/bar/baz.txt'
$ echo ${bazfile##*/}
baz.txt
Чтобы удалить расширение, которое вы хотите использовать %
:
$ {string% substring}
Удаляет самое короткое совпадение $ substring из задней части $ string.
$ echo ${bazfile%.*}
/foo/bar/baz