[
यदि कमांड को एग्जिट-स्टेटस जीरो रिटर्न मिलता है, तो उसके तर्कों में निहित अभिव्यक्ति को सही और गैर-शून्य एग्जिट-स्टेटस माना जाता है, यदि एक्सप्रेशन को उसके तर्कों में निहित माना जाता है, तो उसे गलत माना जाता है। यह त्रुटि संदेश के साथ भी विफल हो जाता है यदि इसका अंतिम तर्क नहीं है ]
(यह विशुद्ध रूप से सौंदर्य कारणों से किया जाता है)।
उदाहरण के लिए:
[ 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/test
enable -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