Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Смотрите раздел Удаление подстроки в Расширенном Bash -Scripting Guide:

${string##substring}

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

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

Ответ 2

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

${PARAMETER##WORD}  Results in removal of the longest matching pattern from the beginning rather than the shortest.
for example
[[email protected] ~]$ x="a1 b1 c2 d2"
[[email protected] ~]$ echo ${x#*1}
b1 c2 d2
[[email protected] ~]$ echo ${x##*1}
c2 d2
[[email protected] ~]$ echo ${x%1*}
a1 b
[[email protected] ~]$ echo ${x%%1*}
a
[[email protected] ~]$ echo ${x/1/3}
a3 b1 c2 d2
[[email protected] ~]$ echo ${x//1/3}
a3 b3 c2 d2
[[email protected] ~]$ echo ${x//?1/z3}
z3 z3 c2 d2

Ответ 3

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