โดยปกติสิ่งที่อยู่ในเครื่องหมายคำพูดคู่จะนับเป็นหนึ่งคำและดังนั้นจึงนับเป็นหนึ่งพารามิเตอร์เมื่อเรียกโปรแกรมด้วย "... " "$ @" เป็นข้อยกเว้นหรือไม่เนื่องจากมีการแบ่งคำต่าง ๆ ตามพารามิเตอร์ที่ส่งไปยังเชลล์สคริปต์
โดยปกติสิ่งที่อยู่ในเครื่องหมายคำพูดคู่จะนับเป็นหนึ่งคำและดังนั้นจึงนับเป็นหนึ่งพารามิเตอร์เมื่อเรียกโปรแกรมด้วย "... " "$ @" เป็นข้อยกเว้นหรือไม่เนื่องจากมีการแบ่งคำต่าง ๆ ตามพารามิเตอร์ที่ส่งไปยังเชลล์สคริปต์
คำตอบ:
ค่อนข้างใช่ แต่ก็ไม่ใช่ มันแตกต่างกัน
$@หมายถึงอาร์เรย์ ทุบตียังช่วยให้ตัวแปรปกติจะเป็นอาร์เรย์และสนับสนุนการขยายเหมือนหรือ${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] = มี
...