Ao tentar obter o último parâmetro posicional definido em /bin/dash
, tentei echo ${$#}
. Surpreendentemente, isso não resultou em erro, mas no PID, que é o mesmo que o $$
conteúdo da variável. Pergunta, é por que essa sintaxe funcionou? Qual é a regra de sintaxe que o shell aplicou aqui?
Basicamente, o que eu fiz foi
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Aparentemente, %
o personagem também é ignorado em tal construção
$ echo ${$%}
13819
Mas *
e @
resulta em erro de substituição ruim:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
Isso é
$$
com um prefixo vazio removido :O mesmo se aplica para
%
(sufixo).@
e*
não são modificadores de expansão de parâmetros, portanto, são erros. Isso aconteceria para$?
,$-
, ou uma hipotética$=
também.${$+}
é uma expansão vazia.