[यदि कमांड को एग्जिट-स्टेटस जीरो रिटर्न मिलता है, तो उसके तर्कों में निहित अभिव्यक्ति को सही और गैर-शून्य एग्जिट-स्टेटस माना जाता है, यदि एक्सप्रेशन को उसके तर्कों में निहित माना जाता है, तो उसे गलत माना जाता है। यह त्रुटि संदेश के साथ भी विफल हो जाता है यदि इसका अंतिम तर्क नहीं है ](यह विशुद्ध रूप से सौंदर्य कारणों से किया जाता है)।
उदाहरण के लिए:
[ hello ]
echo "Exit-status of [ hello ] is:" $?
[ abc = abc ]
echo "Exit-status of [ abc = abc ] is:" $?
[ ]
echo "Exit-status of [ ] is:" $?
[ abc = def ]
echo "Exit-status of [ abc = def ] is:" $?
... उत्पादन होगा:
[हेल्लो] की एक्जिट-स्थिति: 0 - क्योंकि गैर-रिक्त स्ट्रिंग को सही माना जाता है
[एबीसी = एबीसी] की एग्जिट-स्थिति: 0 - क्योंकि 'एबीसी' वास्तव में 'एबीसी' की '
एग्जिट-स्टेटस ' के समान है। : 1 - क्योंकि खाली स्ट्रिंग को गलत माना जाता है
, [abc = def] की Exit-status है: 1 - क्योंकि 'abc' वास्तव में 'def' से भिन्न होती है
हालांकि, बैश और कई अन्य गोले वास्तव में इन मामलों में आम तौर पर आह्वान /bin/[(या /usr/bin/[) नहीं करते हैं , लेकिन बिल्ट-इन कमांड को इसके बजाय बिल्कुल उसी व्यवहार के साथ कहते हैं (प्रदर्शन कारणों से पूरी तरह से)। आह्वान करने के लिए /bin/[(शेल निर्मित बिल्ट-इन सरोगेट नहीं) आपको या तो इसके पथ को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है (उदाहरण के लिए /bin/[ hello ]; आपको ]dirname के साथ उपसर्ग करने की आवश्यकता नहीं है , हालांकि ,), या शेल को अंतर्निर्मित सरोगेट का उपयोग न करने के लिए कॉन्फ़िगर करने के लिए (उदाहरण के लिए) enable -n [बाश में)।
पुनश्च: जैसा कि अन्य उत्तरों में कहा गया था, [से संबंधित है test। लेकिन test, इसके विपरीत [, ]इसके अंतिम तर्क के रूप में आवश्यकता नहीं है (और यह बिल्कुल भी उम्मीद नहीं करता है, तर्कों के ]लिए अतिरिक्त जोड़ने से testयह त्रुटि संदेश के साथ विफल हो सकता है या गलत परिणाम वापस कर सकता है) । और एक ही फाइल को हल कर सकते हैं (उदाहरण के लिए एक है सांकेतिक रूप से लिंक , इस मामले में व्यवहार मोड़ शायद द्वारा कार्यान्वित किया जाता वर्तमान में कथित आदेश का विश्लेषण करने के भीतर / ही कोड) या अलग फ़ाइलों के लिए। के लिए , खोल भी आम तौर पर invokes बनाया-में किराए की, जब तक पथ स्पष्ट रूप से निर्दिष्ट किया जाता है ( ) या इसे कॉन्फ़िगर किया गया है ऐसा करने के लिए नहीं (/bin/test/bin/[test[test/bin/testenable -n test)।
PPS: इसके विपरीत testऔर [, आधुनिक ifकभी एक वास्तविक फ़ाइल नहीं है। यह शेल (उदा। बैश) सिंटैक्स का हिस्सा है: if commandA; then commandB; fi(सेमीकॉलन के बजाय नईलाइनों का उपयोग किया जा सकता है) commandBयदि और-और-केवल- commandAशून्य स्थिति के साथ बाहर निकलने पर निष्पादित होने का कारण बनता है । यह पूरी तरह से व्यवहार पर फिट बैठता है , testया [उन्हें जैसे if [ "$a" = foo ]; then …; fi (या if test "$a" = foo; then …; fi- बस कम पठनीय) को संयोजित करने की अनुमति देता है । हालांकि, आधुनिक स्क्रिप्ट अक्सर या के [[बजाय का उपयोग करते हैं , जो (के रूप में ) कभी भी एक वास्तविक फ़ाइल नहीं होती है, लेकिन हमेशा शेल सिंटैक्स का एक हिस्सा होता है।test[if
PPPS: जैसा कि man- manआपके फ़ाइल-सिस्टम में हर कमांड पर एक लेख होने की कभी उम्मीद नहीं की जाती है। कुछ (यहां तक कि 'असली', फ़ाइल-आधारित) आदेशों पर जानकारी, गायब हो सकता है कुछ खोल बनाया-इन शायद वर्तमान न केवल विशिष्ट खोल करने के लिए समर्पित एक लेख के भीतर (जो जगह है जहाँ आप सबसे निश्चित रूप से के बारे में जानकारी मिल जाएगा है पर जानकारी test, [, if, [[)। फिर भी, कई वितरणों के लिए स्पष्ट- manसार हैं testऔर [। (के बारे में --help, यह testस्पष्ट कारण के साथ मान्यता प्राप्त नहीं है : इसे चुपचाप मामलों को संभालने की आवश्यकता है a=--help; test "$a", जैसे कुछ वितरण पर [ --help(बंद किए बिना ]) अभी भी मदद दिखाता है, कुछ पर यह नहीं करता है।)
[को संदर्भित करता हैtest, हालांकि आदेश, नहींexpr, तो यह होना चाहिएman test