Пытаясь получить последний набор позиционных параметров /bin/dash
, я пытался echo ${$#}
. Удивительно, но это привело не к ошибке, а к PID, который совпадает с $$
содержимым переменной. Вопрос, почему этот синтаксис работает? Какое синтаксическое правило применяется к этой оболочке?
В основном то, что я сделал, это
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Видимо, %
персонаж также игнорируется в такой конструкции
$ echo ${$%}
13819
Но *
и @
привести к ошибочной замене:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
${$*}
и${$@}
производите?#
и%
и какие результаты поведения от тех.eval
, напримерdash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Источник: Ubuntu Wikifor i; do true; done
как получить последний элемент$i
), но искал что-то более элегантное.eval
Конечно, могут возникнуть потенциальные проблемы, подумайте, в какой степени - это другая тема. Но да, это вариантОтветы:
Это
$$
с удаленным пустым префиксом :То же самое относится к
%
(суффикс).@
и*
не являются модификаторами расширения параметров, поэтому они являются ошибками. Бывало для$?
,$-
или гипотетический ,$=
а также.${$+}
это пустое расширение.источник