जहां तक मैं देख सकता हूं, exec 3>&-
और exec 3<&-
समान हैं और किसी भी फाइल डिस्क्रिप्टर पर इस्तेमाल किया जा सकता है, भले ही यह कैसे खोला गया हो। शेल कमांड लैंग्वेज की पोसिक्स परिभाषा की धारा 2.7.6 और 2.7.5 के अनुसार :
2.7.5 एक इनपुट फ़ाइल डिस्क्रिप्टर को डुप्लिकेट करना
पुनर्निर्देशन ऑपरेटर:
[N] <और शब्द
[... कटाव ...]
यदि शब्द '-' का मूल्यांकन करता है, तो फ़ाइल डिस्क्रिप्टर n या मानक इनपुट यदि n निर्दिष्ट नहीं है, तो बंद कर दिया जाएगा। फ़ाइल डिस्क्रिप्टर को खोलने का प्रयास जो खुला नहीं है, उसमें त्रुटि नहीं होगी। यदि शब्द किसी और चीज़ का मूल्यांकन करता है, तो व्यवहार अनिर्दिष्ट है।
2.7.6 डुप्लिकेटिंग आउटपुट फ़ाइल डिस्क्रिप्टर
पुनर्निर्देशन ऑपरेटर:
[N]> और शब्द
[... कटाव ...]
यदि शब्द '-' का मूल्यांकन करता है, तो फ़ाइल डिस्क्रिप्टर n या मानक आउटपुट यदि n निर्दिष्ट नहीं है, तो बंद है। फ़ाइल डिस्क्रिप्टर को खोलने का प्रयास जो खुला नहीं है, उसमें त्रुटि नहीं होगी। यदि शब्द किसी और चीज़ का मूल्यांकन करता है, तो व्यवहार अनिर्दिष्ट है।
ध्यान दें कि मूल रूप से फ़ाइल डिस्क्रिप्टर n को कैसे खोला गया था, इसके बारे में न तो कुछ भी निर्दिष्ट करता है। यह इस तथ्य के अनुरूप है कि करीब (2) इस बात की परवाह नहीं करता है कि आपने फ़ाइल कैसे खोली।
निम्नलिखित का एक त्वरित स्ट्रेस:
exec 3< /etc/passwd
exec 4> foo
exec 3<&-
exec 4<&-
इस बनाम:
exec 3< /etc/passwd
exec 4> foo
exec 3<&-
exec 4>&-
दिखाता है कि दोनों मामलों में, बैश बिल्कुल एक ही काम करता है।
दो हल्के रोचक तथ्य
>&-
और<&-
डिफ़ॉल्ट fd है । उसी के लिए जो उपलब्ध नहीं होने के अलावा समान है।>&-
1>&-
<&-
0<&-
x>&y
x<&y
x