Son konumsal parametre setini almaya çalışırken /bin/dashdenedim 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; doneson öğeyi girmeyi biliyordum $i) ama daha zarif bir şey arıyordum. evalTabii ki potansiyel sorunlar olabilir, ne ölçüde düşünülmüş - bu başka bir konu. Ama evet, bu bir seçenek
${$*}ve${$@}üretiyorsunuz?