Starając się uzyskać ostatniego pozycyjny zestaw parametrów w /bin/dash
, próbowałem echo ${$#}
. Nieoczekiwanie nie spowodowało to błędu, ale PID, który jest taki sam jak $$
zmienna zawartość. Pytanie, dlaczego ta składnia działała? Jaką zasadę składni zastosowała tutaj powłoka?
Zasadniczo to, co zrobiłem
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Najwyraźniej %
postać jest również ignorowana w takiej konstrukcji
$ echo ${$%}
13819
Ale *
i @
skutkują złym błędem podstawienia:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
#
i %
i co wynika z tych zachowań.
eval
np dash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Źródło: Ubuntu Wiki
for i; do true; done
dostać ostatni element $i
), ale szukałem czegoś bardziej eleganckiego. eval
oczywiście mogą mieć potencjalne problemy, choć w jakim stopniu - to inny temat. Ale tak, jest to opcja
${$*}
i${$@}
produkujesz?