เท่าที่ฉันเห็นexec 3>&-
และexec 3<&-
เหมือนกันและสามารถใช้กับตัวอธิบายไฟล์ใด ๆ ไม่ว่าจะเปิดอย่างไร ตามส่วน 2.7.6 และ 2.7.5 ของการกำหนด POSIX ของภาษาคำสั่งเชลล์ :
2.7.5 การทำซ้ำตัวบ่งชี้ไฟล์อินพุต
ผู้ประกอบการเปลี่ยนเส้นทาง:
[N] <& คำ
[ ... SNIP ... ]
หาก word ประเมินค่าเป็น '-' ไฟล์ descriptor n หรืออินพุตมาตรฐานหากไม่ได้ระบุ n จะต้องปิด ความพยายามในการปิดไฟล์ descriptor ที่ไม่เปิดจะไม่ถือเป็นข้อผิดพลาด หากคำประเมินเป็นอย่างอื่นพฤติกรรมจะไม่ได้รับการกำหนด
2.7.6 การทำซ้ำ Descriptor ไฟล์เอาต์พุต
ผู้ประกอบการเปลี่ยนเส้นทาง:
[N]> & คำ
[ ... SNIP ... ]
หาก word ประเมินค่าเป็น '-' ไฟล์ descriptor n หรือเอาต์พุตมาตรฐานหากไม่ได้ระบุ n จะถูกปิด ความพยายามในการปิดไฟล์ descriptor ที่ไม่เปิดจะไม่ถือเป็นข้อผิดพลาด หากคำประเมินเป็นอย่างอื่นพฤติกรรมจะไม่ได้รับการกำหนด
โปรดทราบว่าไม่ได้ระบุอะไรเกี่ยวกับวิธีการเปิดไฟล์ descriptor n สิ่งนี้สอดคล้องกับความจริงที่ว่าclose (2)ไม่สนใจว่าคุณจะเปิดไฟล์อย่างไร
strace อย่างรวดเร็วต่อไปนี้:
exec 3< /etc/passwd
exec 4> foo
exec 3<&-
exec 4<&-
เมื่อเทียบกับสิ่งนี้:
exec 3< /etc/passwd
exec 4> foo
exec 3<&-
exec 4>&-
แสดงให้เห็นว่าในทั้งสองกรณี Bash ทำสิ่งเดียวกัน
ข้อเท็จจริงที่น่าสนใจสองประการ
>&-
และ<&-
เป็นค่าเริ่มต้น fd เมื่อไม่ได้ระบุ (>&-
คือ1>&-
ในขณะที่<&-
เป็น0<&-
) เหมือนกันx>&y
ซึ่งเหมือนกันx<&y
ยกเว้นเมื่อx
ไม่ได้จัดเตรียมไว้ให้