En essayant d'obtenir le dernier paramètre positionnel /bin/dash
, j'ai essayé echo ${$#}
. Étonnamment, cela n'a pas entraîné une erreur, mais un PID qui est identique au $$
contenu des variables. Question, pourquoi cette syntaxe a-t-elle fonctionné? Quelle est la règle de syntaxe que le shell applique ici?
En gros, ce que j'ai fait c'est
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Apparemment, le %
personnage est également ignoré dans une telle construction
$ echo ${$%}
13819
Mais *
et @
entraîner une mauvaise erreur de substitution:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
#
et %
et les résultats du comportement de ceux -ci .
eval
, par exemple dash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Source: Ubuntu Wiki
for i; do true; done
dernier élément $i
) mais je cherchais quelque chose de plus élégant. eval
bien sûr, il peut y avoir des problèmes potentiels, dans quelle mesure - c'est un autre sujet. Mais oui, c'est une option
${$*}
et que vous${$@}
produirez?