Переменная Bash $ {0 ## * /}

8

Я пытаюсь понять переменную, с ${0##*/}которой я столкнулся в bash-скрипте.

Я понимаю, что $0содержит имя или путь сценария, а затем ##работает как в ${parameter##pattern}( источник ).

Но я не понимаю, что /здесь делает. Я знаю только этот синтаксис с двумя слешами:${parameter/pat/string}

Когда я повторяю эту переменную в bash, я получаю bash:)

Наконец, у меня нет разрешения на передачу сценария. Позвольте мне просто сказать, что переменная вызывается SOFT="${0##*/}"и используется в printfвыражении"Error message sent by $SOFT"

bela83
источник

Ответы:

12

Это сокращает все предыдущие элементы пути, так же, как это basename $0будет сделано. ##Пытается найти самое длинное расширение соответствия рисунка приставки:

$ x=/a/b/c/d
$ echo ${x##*/}
d
$ basename $x
d

Со страницы руководства:

${parameter##word}
       Remove matching prefix pattern.  The word is expanded to produce
       a pattern just as in pathname expansion.  If the pattern matches
       the  beginning of the value of parameter, then the result of the
       expansion is the expanded value of parameter with  the  shortest
       matching  pattern  (the ``#'' case) or the longest matching pat‐
       tern (the ``##'' case) deleted.  

Причина использования ${0##*/}заключается в том, что он не включает в себя внешний вызов программы, но это своего рода затеняет происходящее.

Энтон
источник
Просто любопытно, как ты получил справочную страницу для этого?
Psycho Punch
Вы пробовали, man bashа затем искали parameter##?
Anthon
Да, я сделал, man bashно глупый я, я искал, ${поэтому он не смог найти какое-то соответствие. Спасибо.
Psycho Punch