Обновление: я удалил свой ответ на первую часть, так как, по-видимому, я неправильно понял то, что спрашивали.
Синтаксис, который вы упомянули, pathfilename=${f%.*}
, означает, что для pathfilename
установлено значение $f
, а самое короткое совпадение для .*
удалено из конца строки. Это удалит расширение из имени файла. В руководстве bash этот синтаксис описывается следующим образом :
$ {параметр% слово}
$ {параметр %% слово}
Удалить соответствующий шаблон суффикса. Слово раскрывается для создания шаблона, как в раскрытии пути. Если шаблон соответствует завершающей части расширенного значения параметра, то результатом расширения является расширенное значение параметра с самым коротким совпадающим шаблоном (случай «%») или самым длинным совпадающим шаблоном (случай «%%») ) удалено. Если параметр равен @ или *, операция удаления шаблона применяется к каждому позиционному параметру по очереди, и расширение является результирующим списком. Если параметром является переменная массива, подписанная @ или *, операция удаления шаблона применяется по очереди к каждому члену массива, и расширение является результирующим списком.