Ao tentar obter o último parâmetro posicional definido /bin/dash
, tentei echo ${$#}
. Surpreendentemente, isso não resultou em um 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 é
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Aparentemente, o %
personagem também é ignorado nesse construto
$ echo ${$%}
13819
Mas *
e @
resultar em erro de substituição incorreto:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
#
e %
e qual comportamento resultados daqueles.
eval
, por exemplo dash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Fonte: Ubuntu Wiki
for i; do true; done
que era o último item $i
), mas estava procurando algo mais elegante. eval
é claro que pode haver problemas em potencial, pensados até que ponto - esse é outro tópico. Mas sim, é uma opção
${$*}
e${$@}
produzir?