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


8

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

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

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

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

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

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.