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${$@}
produkujesz?#
i%
i co wynika z tych zachowań.eval
npdash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Źródło: Ubuntu Wikifor 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 opcjaOdpowiedzi:
Jest to
$$
po usunięciu pustego prefiksu :To samo dotyczy
%
(sufiks).@
i*
nie są modyfikatorami rozszerzenia parametrów, więc są błędami. Byłoby to zdarzyć$?
,$-
lub hipotetyczna$=
, jak również.${$+}
jest pustym rozszerzeniem.źródło