Что означает ## в сценарии оболочки

При составлении скрипта я наткнулся на команду 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
Другие вопросы по тегам