Короткая версия
Вы можете express ${##parameter}
как:
x=$#
${x#parameter}
и ${###parameter}
как:
x=$#
${x##parameter}
Вы выполняете удаление префикса для $#
(количество аргументов, переданных скрипту / функции).
Более длинная версия
Если parameter
имеет какое-то особое значение, оно, скорее всего, будет указывать c для вашей среды.
$ echo \""${parameter}"\"
""
или даже:
$ set -u
$ echo \""${parameter}"\"
bash: parameter: unbound variable
Теперь, не обращая внимания, быстро рассмотрим документы :
${#parameter}
Подставляется длина в символах расширенного значения параметра.
То есть с переменной parameter
не задано:
$ echo ${#parameter}
0
или с помощью set -u
:
$ echo ${#parameter}
bash: parameter: unbound variable
Дополнительно #
изменено значение на Удалите соответствующий шаблон префикса. с помощью : ${parameter#word}
или ${parameter##word}
синтаксис для ${#}
, то есть количество аргументов, переданных скрипту / функции. Хороший способ увидеть и понять это поведение будет:
$ f() { echo -n "$# " ; echo ${##parameter}; }
$ f
0 0
$ f a b c
3 3
Как вы видите в первом вызове ${#}
было 0
и (и попытка удалить префикс "parameter"
на самом деле ничего не делает) и вторым значением вызова ${#}
является 3
.
Удаление префикса, разница между #
и ##
заключается в том, что при сопоставлении шаблонов вне зависимости от того, удаляется ли короткое или самое длинное соответствие.