Что означает ## в сценарии оболочки
При составлении скрипта я наткнулся на команду do f=${file##*/}
, Мне любопытно узнать, что делает ##
в этой строке значит. Спасибо за ответ заранее
1 ответ
В bash
, он удаляет префикс шаблона.
Здесь, это в основном дает вам все после последнего /
разделитель пути (удаляя префикс */
любое количество символов с последующим /
):
pax> fspec=/path/to/some/file.txt
pax> echo ${fspec##*/} # greedy remove */ at start
file.txt
Там также сингл#
вариант, который является не жадным совпадением и эквивалентами для суффиксов:
pax> echo ${fspec#*/} # non-greedy remove */ at start
path/to/some/file.txt
pax> echo ${fspec%%/*} # greedy remove /* at end
pax> echo ${fspec%/*} # non-greedy remove /* at end
/path/to/some
##*/
а также %/*
примерно эквивалентны тому, что вы получаете от basename
а также dirname
соответственно, но в пределах bash
так что вам не нужно вызывать внешнюю программу:
pax> basename $fspec
file.txt
pax> dirname $fspec
/path/to/some