Bei dem Versuch, den letzten Positionsparameter einzustellen /bin/dash
, habe ich es versucht echo ${$#}
. Überraschenderweise führte dies nicht zu einem Fehler, sondern zu einer PID, die mit $$
variablen Inhalten identisch ist. Frage, warum hat diese Syntax funktioniert? Welche Syntaxregel hat die Shell hier angewendet?
Grundsätzlich habe ich getan
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Anscheinend wird der %
Charakter in einem solchen Konstrukt auch ignoriert
$ echo ${$%}
13819
Aber *
und das @
führt zu einem schlechten Substitutionsfehler:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
#
und ausprobiert %
und welches Verhalten daraus resultiert.
eval
z dash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Quelle: Ubuntu Wiki
for i; do true; done
ich das letzte Element bearbeiten musste$i
), habe aber nach etwas Eleganterem gesucht. eval
Natürlich kann es potenzielle Probleme geben, inwieweit gedacht - das ist ein anderes Thema. Aber ja, es ist eine Option
${$*}
und${$@}
produzieren Sie?