-พฤติกรรมทุบตีในทางที่ค่อนข้างไม่ได้มาตรฐานเมื่อมันมาถึง
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"