Son konumsal parametre setini almaya çalışırken /bin/dash
denedim echo ${$#}
. Şaşırtıcı bir şekilde bu bir hatayla sonuçlanmadı, ancak $$
değişken içeriklerle aynı olan PID'ye dönüştü . Soru, bu sözdizimi neden işe yaradı? Kabuğun burada uygulandığı sözdizimi kuralı nedir?
Temel olarak, yaptığım şey
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Görünüşe göre, %
karakter de böyle bir yapıda göz ardı ediliyor
$ echo ${$%}
13819
Ama *
ve @
kötü ikame hatasına neden:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
#
ve %
bunlardan hangi davranışlar ortaya çıkıyor.
eval
, örn dash -c 'set 1 2 3 4 5; eval "echo \$$#"'
. Kaynak: Ubuntu Wiki
for i; do true; done
son öğeyi girmeyi biliyordum $i
) ama daha zarif bir şey arıyordum. eval
Tabii ki potansiyel sorunlar olabilir, ne ölçüde düşünülmüş - bu başka bir konu. Ama evet, bu bir seçenek
${$*}
ve${$@}
üretiyorsunuz?