เครื่องหมายดอลลาร์ตามด้วยเครื่องหมายวงเล็บเหลี่ยม $ […] หมายถึงทุบตีอย่างไร


34

ปรากฏว่าการดำเนินการขยายตัวทางคณิตศาสตร์เช่นเดียวกับ$[expr] $((expr))แต่ฉันไม่พบการกล่าวถึง$[ในคู่มือทุบตี คำสั่งนี้ไม่ให้ผลลัพธ์:

gunzip -c /usr/share/man/man1/bash.1.gz | grep -E '\$\['

ตัวดำเนินการนี้คืออะไรและมีพฤติกรรมที่เป็นมาตรฐานได้ทุกที่

รุ่น bash ของฉัน: GNU bash, รุ่น 3.2.51 (1) - ปล่อย (x86_64-apple-darwin13)


3
หากต้องการตอบคำถามของคุณอย่างชัดเจนเกี่ยวกับมาตรฐาน : ไวยากรณ์bashเฉพาะ(ล้าสมัย) $[...]ไม่ใช่มาตรฐาน $((...))(ที่เกิดจากksh) เป็นมาตรฐาน POSIX
Janis

2
กับอูบุนตู man bash | grep -E '\$\['11.04: ผลลัพธ์: รูปแบบเก่า $ [expression] เลิกใช้แล้วและจะถูกลบออกในรุ่นที่กำลังจะมาถึง
Cyrus

man pages อาจมีสิ่งต่าง ๆ เช่น _t_h_i_s (ซึ่งถูกแปลโดยยูทิลิตี้ man เพื่อให้ปรากฏแตกต่างกัน) ดังนั้น grep ของคุณอาจล้มเหลวหากเกิดสิ่งที่คุณค้นหาควรสังเกตเช่นนี้
Olivier Dulac

คำตอบ:


19

คุณสามารถค้นหาแหล่งที่มาทุบตีเก่าที่นี่ โดยเฉพาะอย่างยิ่งผมดาวน์โหลดทุบตี 1.14.7.tar.gz ในนั้นdocumentation/bash.txtคุณจะพบ:

การขยายเลขคณิต

การขยายเลขคณิตช่วยให้การประเมินผลของการแสดงออกทางคณิตศาสตร์และการทดแทนของผล มีสองรูปแบบสำหรับการขยายเลขคณิต:

     $[expression]

     $((expression))

การอ้างอิงถึง$[หายไปdoc/bash.htmlจากการดาวน์โหลดbash-doc-2.0.tar.gzและNEWSไฟล์ระบุว่า:

ไวยากรณ์การขยายตัวทางคณิตศาสตร์จะไม่ได้รับการสนับสนุนในความโปรดปรานของ$[...]$((...))

$((...))ยังเป็นไวยากรณ์มาตรฐานสำหรับการขยายเลขคณิต แต่อาจถูกเพิ่มลงในมาตรฐานหลังจากการใช้ Bash ดั้งเดิม

อย่างไรก็ตาม$[...]ดูเหมือนว่าจะยังคงใช้งานได้ใน Bash 5.0 ดังนั้นจึงยังไม่ถูกลบอย่างสมบูรณ์


27

ในเธรดในรายการส่งเมล bash ของ GNUกล่าวว่า$[ไวยากรณ์เป็นไวยากรณ์เริ่มต้นที่เลิกใช้งาน$((เนื่องจาก Korn เชลล์ใช้แล้ว

ตามเว็บไซต์นี้คู่มือสำหรับทุบตี 3.2.48 มีการอ้างอิงถึง$[ไวยากรณ์ ดังนั้นการอ้างอิงนี้จึงถูกลบใน 3.2.51

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