“ $ @” เป็นข้อยกเว้นของเครื่องหมายคำพูดคู่หรือไม่


1

โดยปกติสิ่งที่อยู่ในเครื่องหมายคำพูดคู่จะนับเป็นหนึ่งคำและดังนั้นจึงนับเป็นหนึ่งพารามิเตอร์เมื่อเรียกโปรแกรมด้วย "... " "$ @" เป็นข้อยกเว้นหรือไม่เนื่องจากมีการแบ่งคำต่าง ๆ ตามพารามิเตอร์ที่ส่งไปยังเชลล์สคริปต์

คำตอบ:


4

ค่อนข้างใช่ แต่ก็ไม่ใช่ มันแตกต่างกัน

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

โอ้ฉันไม่ทราบว่ากฎสำหรับตัวแปรประเภทอาเรย์ภายในเครื่องหมายคำพูดคู่ ดังนั้นหากฉันเข้าใจถูกต้องเมื่อคุณพิมพ์คำสั่ง "... " คำสั่งจะไม่เห็นพารามิเตอร์ 1 (นั่นคือ argc = 2) มันขึ้นอยู่กับว่าภายในเครื่องหมายคำพูดคู่มีตัวแปรประเภทอาร์เรย์หรือไม่
huehuehue
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.