ขณะที่พยายามที่จะได้รับที่ผ่านมาชุดพารามิเตอร์ตำแหน่งในฉันได้พยายาม/bin/dash echo ${$#}น่าแปลกที่นี่ไม่ได้ส่งผลให้เกิดข้อผิดพลาด แต่เป็น PID ซึ่งเหมือนกับ$$เนื้อหาตัวแปร คำถามทำไมไวยากรณ์นั้นถึงใช้ได้? กฎไวยากรณ์ที่เชลล์ใช้ในที่นี้คืออะไร
โดยทั่วไปสิ่งที่ฉันทำคือ
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819เห็นได้ชัดว่า%ตัวละครยังได้รับการละเว้นในโครงสร้างดังกล่าว
$ echo ${$%}
13819แต่*และ@ส่งผลให้เกิดข้อผิดพลาดในการทดแทนที่ไม่ดี:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution#และ%พฤติกรรมอะไรที่เป็นผลมาจากสิ่งเหล่านั้น
                for i; do true; doneจะนำสิ่งของชิ้นสุดท้ายเข้าไป$i) แต่มองหาอะไรที่หรูหรากว่า evalแน่นอนสามารถมีปัญหาที่อาจเกิดขึ้นคิดว่าขอบเขต - นั่นเป็นหัวข้ออื่น แต่ใช่มันเป็นตัวเลือก
                
${$*}และ${$@}ผลิตอะไร