ฉันเคยเห็น--ใช้ในcompgenคำสั่ง
ตัวอย่างเช่น:
compgen -W "foo bar baz" -- b
ความหมายของสิ่ง--ในนั้นคืออะไร?
ฉันเคยเห็น--ใช้ในcompgenคำสั่ง
ตัวอย่างเช่น:
compgen -W "foo bar baz" -- b
ความหมายของสิ่ง--ในนั้นคืออะไร?
คำตอบ:
ยิ่งไปกว่านั้นมีการใช้เครื่องหมายขีดกลางสองตัว ( --) ในคำสั่ง bash ในตัวและคำสั่งอื่น ๆ อีกมากมายเพื่อบ่งบอกถึงตัวเลือกสุดท้ายของคำสั่งหลังจากนั้นจะยอมรับเฉพาะพารามิเตอร์ตำแหน่งเท่านั้น
ตัวอย่างการใช้งาน: ให้บอกว่าคุณต้องการ grep ไฟล์สำหรับสตริง-v- โดยปกติแล้ว-vจะได้รับการพิจารณาว่าเป็นตัวเลือกในการย้อนกลับความหมายที่ตรงกัน (แสดงเฉพาะบรรทัดที่ไม่ตรงกัน) แต่--คุณสามารถ grep สำหรับสตริง-vดังนี้
grep -- -v file
--ทำงานเพื่อแยกตัวเลือกจากการแสดงออกปกติในgrepแต่วิธีที่ยอมรับคือการใช้/-e --regexp
--ได้แม้ว่าคุณจะถูกต้องในการสังเกตว่าตัวอย่างของฉันด้านบนสามารถเขียนเป็นgrep -e -v file(แม้ว่าจะมีความสับสนมาก)
bashคำสั่ง builtin ยอมรับ--เป็นจุดสิ้นสุดของเครื่องหมายตัวเลือก [และechoอย่ายกตัวอย่างเช่น ( หนึ่งในเหตุผลที่echoไม่สามารถใช้งานได้อย่างน่าเชื่อถือ )
นี่เป็นการทำเครื่องหมายจุดสิ้นสุดของรายการพารามิเตอร์ (ตัวเลือก)
ในman bashเราสามารถอ่านได้ในส่วนของคำสั่ง Shell Builtin :
เว้นแต่จะระบุไว้เป็นอย่างอื่นแต่ละคำสั่ง builtin เอกสารในส่วนนี้เป็นตัวเลือกที่จะยอมรับนำโดย
-ยอมรับที่มีความหมายในตอนท้ายของตัวเลือกที่--
:,true,falseและtestbuiltins ไม่ยอมรับตัวเลือกและการไม่รักษา--เป็นพิเศษexit,logout,break,continue,letและshiftbuiltins ยอมรับและข้อโต้แย้งกระบวนการเริ่มต้นด้วยโดยไม่ต้อง---บิวด์อินอื่นที่ยอมรับอาร์กิวเมนต์ แต่ไม่ได้ระบุว่าเป็นการยอมรับตัวเลือกตีความอาร์กิวเมนต์ที่เริ่มต้นด้วย-ตัวเลือกที่ไม่ถูกต้องและจำเป็นต้อง--ป้องกันการตีความนี้โปรดทราบ
echoว่าไม่ได้แปลความ--หมายถึงจุดสิ้นสุดของตัวเลือก
man bash(หมายเหตุสำหรับตนเองในครั้งต่อไป:)
POSIX.1-2017
12.2 แนวทางไวยากรณ์ของยูทิลิตี้
หลักเกณฑ์ 10:
--อาร์กิวเมนต์แรกที่ไม่ใช่ตัวเลือกอาร์กิวเมนต์ควรได้รับการยอมรับเป็นตัวคั่นระบุจุดสิ้นสุดของตัวเลือก อาร์กิวเมนต์ใด ๆ ต่อไปนี้ควรถูกใช้เป็นตัวถูกดำเนินการแม้ว่าจะเริ่มต้นด้วย-อักขระ ''
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02
setในตัวซึ่งจำเป็นอย่างยิ่ง