Подстановка переменных для получения имени и расширения файла в bash

Я нашел следующий «трюк», чтобы получить имя файла и его расширение.

filename="my file.ext"
name=${filename%.*}
ext=${filename#*.}

Не могли бы вы объяснить эти ${filename%.*} и ${filename#*.} вещи и дать ссылку на соответствующую документацию?


person Michael    schedule 23.11.2013    source источник


Ответы (2)


${filename%.*}   
# % Deletes shortest match of pattern ".*" from back of "filename".

${filename#*.}   
# Deletes the pattern '*.' from front of filename i.e. removes the name

В проекте Linux Documentation есть страница Управление строками. Перейдите в раздел с пометкой удаление подстроки.

person vogomatix    schedule 23.11.2013
comment
Я рекомендую говорить шаблон вместо регулярного выражения. Это не регулярные выражения. - person John Kugelman; 23.11.2013
comment
Согласен, еще не закончил редактирование, когда вы написали. :-) - person vogomatix; 23.11.2013
comment
Также: %% и ## удалит максимально возможное, а не минимальное. - person Paul Draper; 24.02.2015

Оба они являются формой «Удалить соответствующий шаблон префикса», см. справочную страницу bash и найдите Remove matching prefix pattern.

person cforbish    schedule 23.11.2013