В чем смысл синтаксиса ${0##} с переменной, фигурными скобками и символом решетки в bash?

Я только что увидел какой-то код в bash, который я не совсем понял. Будучи начинающим сценаристом bash, я не уверен, что происходит.

echo ${0##/*}
echo ${0}

Я действительно не вижу разницы в выводе этих двух команд (выводит имя скрипта). Это # просто комментарий? А что с /*. Если это комментарий, почему он не мешает закрывающей фигурной скобке }?

Может ли кто-нибудь дать мне некоторое представление об этом синтаксисе?


person user215997    schedule 13.01.2010    source источник


Ответы (3)


См. раздел об удалении подстроки в Advanced Bash-Scripting Guide‡:

${string#substring}

Удаляет самое короткое совпадение substring перед $string.

${string##substring}

Удаляет самое длинное совпадение substring перед $string.

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

‡ Руководство по состоянию на 07.03.2019 ошибочно утверждает, что совпадение соответствует $substring, как если бы substring было именем переменной. Это не так: substring — это просто шаблон.

person Mark Byers    schedule 13.01.2010
comment
Не могли бы вы добавить к этому ссылку на соответствующий раздел в справочном руководстве Bash? Например, gnu.org/software/bash/manual/ - person Benjamin W.; 31.01.2021

Совет по Linux: параметры Bash и расширения параметров

${PARAMETER##WORD}  Results in removal of the longest matching pattern from the beginning rather than the shortest.
for example
[ian@pinguino ~]$ x="a1 b1 c2 d2"
[ian@pinguino ~]$ echo ${x#*1}
b1 c2 d2
[ian@pinguino ~]$ echo ${x##*1}
c2 d2
[ian@pinguino ~]$ echo ${x%1*}
a1 b
[ian@pinguino ~]$ echo ${x%%1*}
a
[ian@pinguino ~]$ echo ${x/1/3}
a3 b1 c2 d2
[ian@pinguino ~]$ echo ${x//1/3}
a3 b3 c2 d2
[ian@pinguino ~]$ echo ${x//?1/z3}
z3 z3 c2 d2
person Paul Creasey    schedule 13.01.2010
comment
какое-то объяснение для таких новичков, как я, было бы лучше, например, как работают эти шаблоны - person Awais Nasir; 09.07.2021

См. раздел Parameter Expansion справочной страницы bash(1).

person Ignacio Vazquez-Abrams    schedule 13.01.2010
comment
shellscript.sh/tips/pattern-substitution — еще один хороший справочник по подстановке параметров - person barakbd; 05.09.2019