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. evalbien 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?