В чем смысл синтаксиса ${0 ##...} с переменными, фигурными скобками и хэш-символом в bash?
Я только что увидел код bash, который я не совсем понял. Будучи новичком bash scripter, я не уверен, что происходит.
echo ${0##/*}
echo ${0}
Я не вижу разницы в выходе в этих двух командах (печатает имя script). Это только #
комментарий? И что с /*
. Если это комментарий, почему это не мешает закрытию скобки }
?
Может ли кто-нибудь дать мне некоторое представление об этом синтаксисе?
Ответы
Ответ 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)
.