$ {! #} ทำงานอย่างไรในการทุบตีเพื่อรับอาร์กิวเมนต์บรรทัดคำสั่งล่าสุด


19

จากคู่มือการใช้สคริปต์การทุบตีขั้นสูงเพื่อรับอาร์กิวเมนต์บรรทัดคำสั่งล่าสุด:

หรือ: lastarg=${!#} เป็นการ อ้างอิงทางอ้อมกับ$#ตัวแปร
โปรดทราบว่าlastarg=${!$#}ไม่ทำงาน


4
นอกจากนี้ ABS ยังค่อนข้างขมวดคิ้วเหมือนเป็นข้อมูลอ้างอิง ดูwooledge.org/~greybot/meta/absสำหรับประวัติของ factoid ใน irc.freenode.org # bash channel ทุบตีแฮกเกอร์วิกิพีเดียและWooledge BashGuideจะไม่เป็นที่น่าอับอายสำหรับความหนาแน่นของความไม่ถูกต้อง ภายในหลังการอ้างอิงทางอ้อมจะมีรายละเอียดในBashFAQ # 6 ; ในอดีตwiki.bash-hackers.org/syntax/pe#indirection
Charles Duffy

1
แค่คำถาม: ไม่!$ง่ายและเหมือนกันใช่ไหม
unxnut

คำตอบ:


27

อย่างที่บอกว่ามันเป็นการอ้างอิงทางอ้อม นำตัวอย่างต่อไปนี้:

$ var=test
$ test='Hello, world'
$ echo ${!var}
Hello, world

ตอนนี้ถ้าฉันจะตั้งค่าพารามิเตอร์ตำแหน่งต่อไปนี้:

$ set -- one two three

และ$#จะแสดงถึงจำนวนรวมของพารามิเตอร์ตำแหน่ง:

$ echo $#
3

ซึ่งหมายความว่าเมื่อฉันเรียกมันเหมือน${!#}ฉันกำลังบอกว่าให้ค่าของพารามิเตอร์ชื่อ3:

$ echo ${!#}
three
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.