-
พฤติกรรมทุบตีในทางที่ค่อนข้างไม่ได้มาตรฐานเมื่อมันมาถึง
POSIXพูดว่า:
หลักเกณฑ์ 10: อาร์กิวเมนต์
แรก--
ที่ไม่ใช่ตัวเลือกอาร์กิวเมนต์ควรได้รับการยอมรับเป็นตัวคั่นที่ระบุถึงจุดสิ้นสุดของตัวเลือก อาร์กิวเมนต์ใด ๆ ต่อไปนี้ควรถือว่าเป็นตัวถูกดำเนินการแม้ว่าจะเริ่มต้นด้วย-
อักขระ
[ ... ]
คำแนะนำที่ 13:
สำหรับยูทิลิตี้ที่ใช้ตัวถูกดำเนินการเพื่อเป็นตัวแทนของไฟล์ที่จะเปิดสำหรับการอ่านหรือการเขียน-
ตัวถูกดำเนินการควรใช้เพื่อหมายถึงเฉพาะอินพุตมาตรฐาน (หรือเอาต์พุตมาตรฐานเมื่อชัดเจนจากบริบทที่ระบุไฟล์เอาต์พุต) หรือ -
ชื่อไฟล์
และ
ในกรณีที่ยูทิลิตี้ที่อธิบายไว้ในปริมาตรเชลล์และยูทิลิตี้ของ POSIX.1-2017 ซึ่งสอดคล้องกับแนวทางเหล่านี้จำเป็นต้องยอมรับหรือไม่ยอมรับตัวถูกดำเนิน-
การหมายถึงอินพุตหรือเอาต์พุตมาตรฐานการใช้งานนี้จะอธิบายไว้ในส่วน OPERANDS มิฉะนั้นถ้าใช้ยูทิลิตี้ดังกล่าวถูกดำเนินการเพื่อเป็นตัวแทนของไฟล์ก็คือการดำเนินการที่กำหนดไว้ไม่ว่าจะถูกดำเนินการ-
ยืนสำหรับการป้อนข้อมูลมาตรฐาน (หรือออกมาตรฐาน) -
หรือไฟล์ชื่อ
แต่man 1 bash
อ่านแล้ว:
--
สัญญาณสิ้นสุดของตัวเลือกและปิดการใช้งานการประมวลผลตัวเลือกต่อไป ข้อโต้แย้งใด ๆ หลังจากนั้น--
จะถือว่าเป็นชื่อไฟล์และข้อโต้แย้ง ข้อโต้แย้งของเทียบเท่ากับ-
--
ดังนั้นสำหรับ Bash -
หมายถึงอินพุตมาตรฐานหรือไฟล์ดังนั้นจึงค่อนข้างไม่ได้มาตรฐาน
ตอนนี้กรณีเฉพาะของคุณ:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
ฉันสงสัยว่าผู้เขียนคำสั่งนี้อาจไม่ตระหนักว่า-
เทียบเท่ากับ--
ในกรณีนี้ ฉันสงสัยว่าผู้เขียนต้องการให้แน่ใจว่าbash
จะอ่านจากอินพุตมาตรฐานของพวกเขาพวกเขาคาดว่า-
จะทำงานตามแนวทางที่ 13
แต่แม้ว่ามันจะทำงานได้ตามแนวทาง-
ก็จะไม่จำเป็นที่นี่เพราะbash
ตรวจพบเมื่ออินพุตมาตรฐานของมันเป็นท่อและทำตาม (ยกเว้น-c
จะได้รับ ฯลฯ )
ยัง-
ไม่ทำงานตามแนวทาง แต่ก็ใช้งาน--
ได้ ยังคง--
ไม่จำเป็นที่นี่เพราะไม่มีข้อโต้แย้งหลังจากนั้น
ในความคิดของฉันการ-
เปลี่ยนแปลงครั้งสุดท้ายไม่มีอะไร คำสั่งจะใช้งานได้หากไม่มี
หากต้องการดูว่า--
และ-
มีประโยชน์โดยทั่วไปอย่างไรให้ศึกษาตัวอย่างด้านล่าง
cat
ใน Kubuntu ของฉันเชื่อฟังแนวทางทั้งสองและฉันจะใช้มันเพื่อแสดงให้เห็นถึงประโยชน์ของและ-
--
ปล่อยให้มีชื่อไฟล์foo
อยู่ สิ่งนี้จะพิมพ์ไฟล์:
cat foo
ปล่อยให้มีชื่อไฟล์--help
อยู่ สิ่งนี้จะไม่พิมพ์ไฟล์:
cat --help
แต่จะพิมพ์ไฟล์ชื่อ--help
:
cat -- --help
สิ่งนี้จะต่อเชื่อมไฟล์ที่--help
มีชื่ออะไรก็ตามที่มาจากอินพุตมาตรฐาน:
cat -- --help -
ดูเหมือนว่าคุณไม่ต้องการจริงๆ--
เพราะคุณสามารถส่งผ่าน./--help
ซึ่งจะถูกตีความว่าเป็นไฟล์ได้อย่างแน่นอน แต่ให้พิจารณา
cat "$file"
เมื่อคุณไม่ทราบล่วงหน้าว่าเนื้อหาของตัวแปรคืออะไร คุณไม่สามารถเพิ่มเข้าไปเพียง./
เพราะมันอาจเป็นเส้นทางที่แน่นอนและ./
จะทำลายมัน ในทางกลับกันอาจเป็นไฟล์ชื่อ--help
(เพราะเหตุใด) ในกรณี--
นี้มีประโยชน์มาก นี่เป็นคำสั่งที่มีประสิทธิภาพมากขึ้น:
cat -- "$file"