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 que vous${$@}
produirez?#
et%
et les résultats du comportement de ceux -ci .eval
, par exempledash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Source: Ubuntu Wikifor 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 optionRéponses:
C'est
$$
avec un préfixe vide supprimé :Il en va de même pour
%
(suffixe).@
et*
ne sont pas des modificateurs d'extension de paramètres, ce sont donc des erreurs. Cela se produirait pour$?
,$-
ou hypothétique$=
aussi.${$+}
est une extension vide.la source