में bash
, दो तर्क के संदर्भ के साथ test
कमान, -a file
और -e file
एक ही हैं। लेकिन उनके पास कुछ अंतर है, क्योंकि -a
एक बाइनरी ऑपरेटर भी है।
-e
यूनिरी को पोसिक्स द्वारा परिभाषित किया गया है, लेकिन -a
यूनरी नहीं है। POSIX केवल -a
बाइनरी को परिभाषित करता है ( परीक्षण POSIX देखें )।
POSIX तीन तर्क test
व्यवहार को परिभाषित करता है:
3 तर्क:
यदि $ 2 एक बाइनरी प्राइमरी है, तो $ 1 और $ 3 का बाइनरी टेस्ट करें।
यदि $ 1 '' है, तो $ 2 और $ 3 के दो-तर्क परीक्षण को नकारें।
यदि $ 1 '(' और $ 3 'है') है, तो $ 2 का एकात्मक परीक्षण करें। उन प्रणालियों पर जो XSI विकल्प का समर्थन नहीं करते हैं, यदि $ 1 '(' और $ 3 '') है तो परिणाम अनिर्दिष्ट हैं।
अन्यथा, अनिर्दिष्ट परिणामों का उत्पादन करें।
इसलिए -a
भी अजीब परिणाम होता है:
$ [ ! -a . ] && echo true
true
-a
तीन तर्कों के संदर्भ में बाइनरी ऑपरेटर के रूप में माना जाता है। बैश FAQ प्रश्न E1 देखें । POSIX में -a
कॉर्नशेल से प्राप्त होने का भी उल्लेख है लेकिन बाद में -e
इसे बदल दिया गया क्योंकि यह -a
बाइनरी और अनरी के बीच भ्रामक बनाता है -a
।
-ई प्राइमरी, जिसमें सी शेल द्वारा प्रदान की गई समान कार्यक्षमता है, को जोड़ा गया क्योंकि यह शेल स्क्रिप्ट के लिए एकमात्र तरीका प्रदान करता है ताकि यह पता लगाया जा सके कि फ़ाइल खोलने की कोशिश किए बिना कोई फ़ाइल मौजूद है या नहीं। चूंकि कार्यान्वयन को अतिरिक्त फ़ाइल प्रकारों को जोड़ने की अनुमति है, एक पोर्टेबल स्क्रिप्ट का उपयोग नहीं किया जा सकता है:
test -b foo -o -c foo -o -d foo -o -f foo -o -p foo
पता लगाने के लिए कि क्या फू एक मौजूदा फ़ाइल है। ऐतिहासिक बीएसडी प्रणालियों पर, एक फ़ाइल का अस्तित्व निम्न द्वारा निर्धारित किया जा सकता है:
test -f foo -o -d foo
लेकिन यह निर्धारित करने का कोई आसान तरीका नहीं था कि एक मौजूदा फ़ाइल एक नियमित फ़ाइल थी। एक प्रारंभिक प्रस्ताव में कोर्नशेल-ए प्राथमिक (समान अर्थ के साथ) का उपयोग किया गया था, लेकिन इसे -ई में बदल दिया गया था क्योंकि मानव बाइनरी ऑपरेटर के साथ -a प्राथमिक को भ्रमित करने वाले मनुष्यों की उच्च संभावना के बारे में चिंताएं थीं।
-a
बाइनरी को भी अप्रचलित के रूप में चिह्नित किया गया है, क्योंकि यह कुछ अस्पष्ट अभिव्यक्ति की ओर जाता है, जिसमें 4 से अधिक तर्क हैं। इन> 4 तर्कों की अभिव्यक्ति के साथ, POSIX परिभाषित करता है कि परिणाम अनिर्दिष्ट है।