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ń.
evalnp dash -c 'set 1 2 3 4 5; eval "echo \$$#"'. Źródło: Ubuntu Wiki
for i; do true; donedostać ostatni element $i), ale szukałem czegoś bardziej eleganckiego. evaloczywiście mogą mieć potencjalne problemy, choć w jakim stopniu - to inny temat. Ale tak, jest to opcja
${$*}i${$@}produkujesz?