Намагаючись отримати останній встановлений позиційний параметр /bin/dash
, я намагався echo ${$#}
. Дивно, але це не призвело до помилки, але до PID, який є таким же, як $$
зміст змісту. Питання: чому цей синтаксис працював? Яке синтаксичне правило, яке тут застосовано оболонкою?
В основному, те, що я зробив
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Мабуть, %
персонаж також ігнорується в такій конструкції
$ echo ${$%}
13819
Але *
і @
привести до поганої помилку заміщення:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
#
і %
і які результати поведінки від тих.
eval
, наприклад dash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Джерело: Ubuntu Wiki
for i; do true; done
потрібно отримати останній предмет $i
), але шукав щось більш елегантне. eval
Звичайно, можуть виникнути потенційні проблеми, подумати, в якій мірі - це інша тема. Але так, це варіант
${$*}
та${$@}
виробите?