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; done
untuk mendapatkan item terakhir $i
) tetapi mencari sesuatu yang lebih elegan. eval
tentu saja dapat memiliki masalah potensial, dipikirkan sejauh mana - itu topik lain. Tapi ya, itu pilihan
${$*}
dan${$@}
hasilkan?