โดยปกติสิ่งที่อยู่ในเครื่องหมายคำพูดคู่จะนับเป็นหนึ่งคำและดังนั้นจึงนับเป็นหนึ่งพารามิเตอร์เมื่อเรียกโปรแกรมด้วย "... " "$ @" เป็นข้อยกเว้นหรือไม่เนื่องจากมีการแบ่งคำต่าง ๆ ตามพารามิเตอร์ที่ส่งไปยังเชลล์สคริปต์
โดยปกติสิ่งที่อยู่ในเครื่องหมายคำพูดคู่จะนับเป็นหนึ่งคำและดังนั้นจึงนับเป็นหนึ่งพารามิเตอร์เมื่อเรียกโปรแกรมด้วย "... " "$ @" เป็นข้อยกเว้นหรือไม่เนื่องจากมีการแบ่งคำต่าง ๆ ตามพารามิเตอร์ที่ส่งไปยังเชลล์สคริปต์
คำตอบ:
ค่อนข้างใช่ แต่ก็ไม่ใช่ มันแตกต่างกัน
$@
หมายถึงอาร์เรย์ ทุบตียังช่วยให้ตัวแปรปกติจะเป็นอาร์เรย์และสนับสนุนการขยายเหมือนหรือ${var[*]}
${var[@]}
หลังยังขยายไปยังค่าทั้งหมดของ $ var เป็นคำที่แยกต่างหาก
อย่างไรก็ตามหากการขยายอยู่ในเครื่องหมายคำพูดคู่ค่าแต่ละค่าจะยังคงทำงานเหมือนถูกอ้างอิง - นั่นคือการแยกคำไม่เกิดขึ้น ดังนั้นจึงมีไม่มีข้อยกเว้นในที่เรื่อง - $@
VS "$@"
ยังคงเป็นเช่นเดียวกับVS$foo
"$foo"
$ var = ("รายการ 1" "รายการ 2 มีช่องว่าง" "รายการ 3 หรือไม่รายการ 3") $ ประกาศ -p var ประกาศ -a var = ([0] = "รายการ 1" [1] = "รายการ 2 มีช่องว่าง" [2] = "รายการ 3? รายการ 3") $ args "$ {var [*]}" argc = 2 argv [0] = args argv [1] = รายการ 1 รายการ 2 มีช่องว่างรายการ 3 หรือไม่ รายการ 3 $ args "$ {var [@]}" argc = 4 argv [0] = args argv [1] = รายการ 1 argv [2] = รายการ 2 มีช่องว่าง argv [3] = รายการ 3? รายการ 3 $ args $ {var [@]} argc = 11 argv [0] = args argv [1] = รายการ argv [2] = 1 argv [3] = รายการ argv [4] = 2 argv [5] = มี ...