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${$@}
hasilkan?#
dan%
dan apa hasil perilaku dari orang-orang.eval
, misdash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Sumber: Ubuntu Wikifor 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 pilihanJawaban:
Ini
$$
dengan awalan kosong yang dihapus :Hal yang sama berlaku untuk
%
(suffix).@
dan*
bukan pengubah ekspansi parameter, jadi itu adalah kesalahan. Itu akan terjadi untuk$?
,$-
atau hipotetis sebuah$=
juga.${$+}
adalah ekspansi kosong.sumber