Ketika mencoba untuk mendapatkan set parameter posisi terakhir /bin/dash, saya sudah mencoba echo ${$#}. Anehnya ini tidak menghasilkan kesalahan, tetapi menjadi PID yang sama dengan $$konten variabel. Pertanyaan, mengapa sintaks itu berfungsi? Apa aturan sintaks yang diterapkan shell di sini?
Pada dasarnya, apa yang saya lakukan adalah
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Tampaknya, %karakter juga diabaikan dalam konstruksi semacam itu
$ echo ${$%}
13819
Tetapi *dan @menghasilkan kesalahan penggantian yang buruk:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
#dan %dan apa hasil perilaku dari orang-orang.
eval, mis dash -c 'set 1 2 3 4 5; eval "echo \$$#"'. Sumber: Ubuntu Wiki
for i; do true; doneuntuk mendapatkan item terakhir $i) tetapi mencari sesuatu yang lebih elegan. evaltentu saja dapat memiliki masalah potensial, dipikirkan sejauh mana - itu topik lain. Tapi ya, itu pilihan
${$*}dan${$@}hasilkan?