ขณะที่พยายามที่จะได้รับที่ผ่านมาชุดพารามิเตอร์ตำแหน่งในฉันได้พยายาม/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
แน่นอนสามารถมีปัญหาที่อาจเกิดขึ้นคิดว่าขอบเขต - นั่นเป็นหัวข้ออื่น แต่ใช่มันเป็นตัวเลือก
${$*}
และ${$@}
ผลิตอะไร