“ -” (เส้นประสองครั้ง) หมายถึงอะไร (เรียกอีกอย่างว่า "เส้นประคู่เปลือย")


469

ฉันเคยเห็น--ใช้ในcompgenคำสั่ง

ตัวอย่างเช่น:

compgen -W "foo bar baz" -- b

ความหมายของสิ่ง--ในนั้นคืออะไร?

คำตอบ:


583

ยิ่งไปกว่านั้นมีการใช้เครื่องหมายขีดกลางสองตัว ( --) ในคำสั่ง bash ในตัวและคำสั่งอื่น ๆ อีกมากมายเพื่อบ่งบอกถึงตัวเลือกสุดท้ายของคำสั่งหลังจากนั้นจะยอมรับเฉพาะพารามิเตอร์ตำแหน่งเท่านั้น

ตัวอย่างการใช้งาน: ให้บอกว่าคุณต้องการ grep ไฟล์สำหรับสตริง-v- โดยปกติแล้ว-vจะได้รับการพิจารณาว่าเป็นตัวเลือกในการย้อนกลับความหมายที่ตรงกัน (แสดงเฉพาะบรรทัดที่ไม่ตรงกัน) แต่--คุณสามารถ grep สำหรับสตริง-vดังนี้

grep -- -v file

3
สะดุดตาที่สุดใน Bash setในตัวซึ่งจำเป็นอย่างยิ่ง
l0b0

10
--ทำงานเพื่อแยกตัวเลือกจากการแสดงออกปกติในgrepแต่วิธีที่ยอมรับคือการใช้/-e --regexp
l0b0

5
@ l0b0: รูปแบบการค้นหาโดยทั่วไปเป็นหนึ่งในพารามิเตอร์ตำแหน่งดังนั้นจึงสามารถใส่--ได้แม้ว่าคุณจะถูกต้องในการสังเกตว่าตัวอย่างของฉันด้านบนสามารถเขียนเป็นgrep -e -v file(แม้ว่าจะมีความสับสนมาก)
Guss

2
ไม่ได้ทุกbashคำสั่ง builtin ยอมรับ--เป็นจุดสิ้นสุดของเครื่องหมายตัวเลือก [และechoอย่ายกตัวอย่างเช่น ( หนึ่งในเหตุผลที่echoไม่สามารถใช้งานได้อย่างน่าเชื่อถือ )
Stéphane Chazelas

44

นี่เป็นการทำเครื่องหมายจุดสิ้นสุดของรายการพารามิเตอร์ (ตัวเลือก)


39

ในman bashเราสามารถอ่านได้ในส่วนของคำสั่ง Shell Builtin :

เว้นแต่จะระบุไว้เป็นอย่างอื่นแต่ละคำสั่ง builtin เอกสารในส่วนนี้เป็นตัวเลือกที่จะยอมรับนำโดย-ยอมรับที่มีความหมายในตอนท้ายของตัวเลือกที่--

:, true, falseและtestbuiltins ไม่ยอมรับตัวเลือกและการไม่รักษา--เป็นพิเศษ exit, logout, break, continue, letและshiftbuiltins ยอมรับและข้อโต้แย้งกระบวนการเริ่มต้นด้วยโดยไม่ต้อง- --บิวด์อินอื่นที่ยอมรับอาร์กิวเมนต์ แต่ไม่ได้ระบุว่าเป็นการยอมรับตัวเลือกตีความอาร์กิวเมนต์ที่เริ่มต้นด้วย-ตัวเลือกที่ไม่ถูกต้องและจำเป็นต้อง--ป้องกันการตีความนี้

โปรดทราบechoว่าไม่ได้แปลความ--หมายถึงจุดสิ้นสุดของตัวเลือก


2
+1 สำหรับการอ้างอิงman bash(หมายเหตุสำหรับตนเองในครั้งต่อไป:)
user3773048

11

POSIX.1-2017

12.2 แนวทางไวยากรณ์ของยูทิลิตี้

หลักเกณฑ์ 10:

--อาร์กิวเมนต์แรกที่ไม่ใช่ตัวเลือกอาร์กิวเมนต์ควรได้รับการยอมรับเป็นตัวคั่นระบุจุดสิ้นสุดของตัวเลือก อาร์กิวเมนต์ใด ๆ ต่อไปนี้ควรถูกใช้เป็นตัวถูกดำเนินการแม้ว่าจะเริ่มต้นด้วย-อักขระ ''

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

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