Намагаючись отримати останній встановлений позиційний параметр /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Звичайно, можуть виникнути потенційні проблеми, подумати, в якій мірі - це інша тема. Але так, це варіант
${$*}та${$@}виробите?