यहां दो संबंधित मुद्दे हैं।
सबसे पहले, ओपी का प्रश्न, क्यों 0 सच है लेकिन गलत है 1 शेल में? और दूसरा, आवेदन सफलता के लिए 0 और विफलता के लिए गैर-शून्य क्यों लौटते हैं?
ओपी के प्रश्न का उत्तर देने के लिए हमें दूसरे प्रश्न को समझने की आवश्यकता है। इस पोस्ट के कई उत्तरों ने वर्णन किया है कि यह एक सम्मेलन है और इस सम्मेलन के कुछ उपनामों को सूचीबद्ध किया है। इनमें से कुछ बारीकियों को नीचे संक्षेप में प्रस्तुत किया गया है।
सफलता के लिए आवेदन क्यों 0 और विफलता के लिए गैर-शून्य है?
कोड जो किसी ऑपरेशन को आमंत्रित करता है उसे ऑपरेशन की निकास स्थिति के बारे में दो बातें जानने की आवश्यकता होती है। क्या ऑपरेशन सफलतापूर्वक समाप्त हो गया? [* १] और यदि ऑपरेशन सफलतापूर्वक नहीं निकलता है तो ऑपरेशन असफल क्यों हुआ? सफलता को निरूपित करने के लिए किसी भी मूल्य का उपयोग किया जा सकता है। लेकिन 0 किसी भी अन्य संख्या की तुलना में अधिक सुविधाजनक है क्योंकि यह प्लेटफार्मों के बीच पोर्टेबल है। 16 अगस्त 2011 को इस प्रश्न के उत्तर का संक्षेप :
शून्य एन्कोडिंग-स्वतंत्र है।
अगर हम 32-बिट पूर्णांक शब्द में एक (1) को स्टोर करना चाहते हैं, तो पहला सवाल "बिग-एंडियन शब्द या लिटिल-एंडियन शब्द होगा?", उसके बाद "बाइट्स एक छोटे-एंडियन शब्द की रचना कब तक कर रहे हैं?" ", जबकि शून्य हमेशा एक जैसा दिखेगा।
इसके अलावा यह उम्मीद करने की जरूरत है कि कुछ लोग गलत तरीके से चार या कुछ बिंदु पर या यहां तक कि तैरने के लिए गलत तरीके से डालते हैं। (int) ((char) ENOLCK) ENOLCK नहीं है जब char कम से कम 8-बिट लंबा नहीं है (7-बिट ASCII char Machines UNIX द्वारा समर्थित हैं), जबकि (int) ((char) 0) 0 स्वतंत्र है चार का वास्तु विवरण।
एक बार जब यह निर्धारित किया जाता है कि 0 सफलता के लिए वापसी मूल्य होगा, तो यह विफलता के लिए किसी भी गैर-शून्य मूल्य का उपयोग करने के लिए समझ में आता है। यह कई एग्जिट कोड को इस सवाल का जवाब देने की अनुमति देता है कि ऑपरेशन विफल क्यों हुआ।
क्यों 0 सच है, लेकिन झूठ 1 खोल में है?
गोले के मौलिक उपयोगों में से एक है उन्हें स्क्रिप्टिंग करके प्रक्रियाओं को स्वचालित करना। आमतौर पर इसका अर्थ है किसी ऑपरेशन को लागू करना और फिर ऑपरेशन की निकास स्थिति के आधार पर सशर्त रूप से कुछ और करना। फिलिप ए ने इस पोस्ट के अपने उत्तर में स्पष्ट रूप से समझाया कि
बैश में और सामान्य रूप से यूनिक्स गोले में, वापसी मूल्य बूलियन नहीं हैं। वे पूर्णांक निकास कोड हैं।
फिर यह आवश्यक है कि बूलियन मान के रूप में इन परिचालनों की निकास स्थिति की व्याख्या करें। यह एक सफल मानचित्र बनाने के लिए समझ में आता है (0
) निकास स्थिति को सच और किसी भी गैर-शून्य / विफलता निकास स्थिति को गलत । ऐसा करने से जंजीर खोल कमांड के सशर्त निष्पादन की अनुमति मिलती है।
यहाँ एक उदाहरण है mkdir deleteme && cd $_ && pwd
। क्योंकि शेल 0 की व्याख्या करता है क्योंकि यह आदेश सही रूप में अपेक्षित रूप से काम करता है। यदि शेल 0 को गलत के रूप में व्याख्या करने के लिए था, तो आपको प्रत्येक ऑपरेशन के लिए व्याख्या किए गए निकास स्थिति को उल्टा करना होगा।
संक्षेप में, यह शेल के लिए 0 की व्याख्या करने के लिए निरर्थक होगा, क्योंकि जो एक सफल निकास स्थिति के लिए आवेदन 0 लौटाता है, वह गलत है।
[* १]: हाँ, कई बार ऑपरेशन को केवल एक सरल सफलता संदेश से अधिक वापस करने की आवश्यकता होती है, लेकिन यह इस धागे के दायरे से परे है।
उन्नत बैश-स्क्रिप्टिंग गाइड में परिशिष्ट ई भी देखें