आपको इस बात की परवाह क्यों करनी चाहिए कि मैं 250+ अपवोट उत्तर होने के बावजूद क्या कहता हूं
ऐसा नहीं है कि नहीं है 0 = true
और 1 = false
। यह है: शून्य का मतलब है कोई विफलता (सफलता) और गैर-शून्य का मतलब विफलता (प्रकार एन) ।
जबकि चयनित उत्तर तकनीकी रूप से "सत्य" है, कृपया झूठेreturn 1
के लिए ** अपने कोड में न डालें । इसके कई दुर्भाग्यपूर्ण दुष्प्रभाव होंगे।
- अनुभवी डेवलपर्स आपको एक शौकिया के रूप में देखेंगे (नीचे दिए गए कारण के लिए)।
- अनुभवी डेवलपर्स ऐसा नहीं करते हैं (नीचे दिए गए सभी कारणों के लिए)।
- यह त्रुटि प्रवण है।
- यहां तक कि अनुभवी डेवलपर्स क्रमशः 0 और 1 को गलत और सच मान सकते हैं (ऊपर दिए गए कारण के लिए)।
- इसके लिए विलक्षण और हास्यास्पद टिप्पणियों की आवश्यकता होती है (या प्रोत्साहित करेंगे)।
- यह वास्तव में निहित रिटर्न की स्थिति से कम सहायक है।
जानें कुछ बैश
बैश मैनुअल का कहना है (जोर मेरा)
वापसी [एन]
एक शेल फ़ंक्शन को निष्पादित करने से रोकने और उसके कॉलर को मान n वापस करने के लिए कारण। यदि n की आपूर्ति नहीं की जाती है , तो रिटर्न वैल्यू फ़ंक्शन में निष्पादित अंतिम कमांड की निकास स्थिति है ।
इसलिए, हमें True और False को इंगित करने के लिए 0 और 1 का उपयोग करने की आवश्यकता नहीं है। तथ्य यह है कि वे ऐसा करते हैं अनिवार्य रूप से तुच्छ ज्ञान केवल डिबगिंग कोड, साक्षात्कार के सवालों के लिए उपयोगी है, और newbies के दिमाग को उड़ाने।
बैश मैनुअल भी कहता है
अन्यथा फ़ंक्शन की वापसी स्थिति निष्पादित अंतिम कमांड की निकास स्थिति है
बैश मैनुअल भी कहता है
( $? ) सबसे हाल ही में निष्पादित अग्रभूमि पाइपलाइन की निकास स्थिति का विस्तार करता है ।
वाह, रुको। पाइप लाइन? चलो बैश मैनुअल को एक बार फिर चालू करें ।
एक पाइप लाइन एक या एक से अधिक कमांड का एक अनुक्रम है जिसे नियंत्रण ऑपरेटरों में से एक द्वारा अलग किया जाता है। ' या '| &'।
हाँ। उन्होंने कहा कि 1 कमांड एक पाइपलाइन है। इसलिए, उन उद्धरणों में से 3 एक ही बात कह रहे हैं।
$?
आपको बताते हैं कि आखिर हुआ क्या था।
- यह बुदबुदाता है।
मेरा जवाब
इसलिए, जबकि @Kambus ने प्रदर्शित किया कि इस तरह के एक सरल कार्य के लिए, return
बिल्कुल भी कोई आवश्यकता नहीं है। मुझे लगता है कि ज्यादातर लोग जो इसे पढ़ेंगे, उनकी जरूरतों की तुलना में अनुचित रूप से सरल था।
क्यों return
?
यदि कोई फ़ंक्शन अपने अंतिम कमांड के निकास की स्थिति को वापस करने जा रहा है, तो return
सभी का उपयोग क्यों करें ? क्योंकि यह एक फ़ंक्शन को निष्पादित करने से रोकता है।
कई शर्तों के तहत निष्पादन बंद करो
01 function i_should(){
02 uname="$(uname -a)"
03
04 [[ "$uname" =~ Darwin ]] && return
05
06 if [[ "$uname" =~ Ubuntu ]]; then
07 release="$(lsb_release -a)"
08 [[ "$release" =~ LTS ]]
09 return
10 fi
11
12 false
13 }
14
15 function do_it(){
16 echo "Hello, old friend."
17 }
18
19 if i_should; then
20 do_it
21 fi
हमारे यहाँ क्या है ...
लाइन 04
एक स्पष्ट [-इश] सच है क्योंकि एलएचएस सच होने पर &&
केवल आरएचएस निष्पादित हो जाता है
लाइन 09
की स्थिति से मेल खाते हुए या तो सही या गलत है08
लाइन के 13
कारण लाइन झूठी हो जाती है12
(हाँ, यह नीचे गोल्फ हो सकता है, लेकिन पूरे उदाहरण से वंचित है।)
एक और आम पैटर्न
# Instead of doing this...
some_command
if [[ $? -eq 1 ]]; then
echo "some_command failed"
fi
# Do this...
some_command
status=$?
if ! $(exit $status); then
echo "some_command failed"
fi
ध्यान दें कि एक status
चर की स्थापना कैसे अर्थ को नष्ट करती है $?
। (निश्चित रूप से आप जानते हैं कि $?
इसका क्या मतलब है, लेकिन किसी को आप से कम जानकार किसी दिन Google को देना होगा। जब तक कि आपका कोड उच्च आवृत्ति व्यापार नहीं कर रहा है, तब तक कुछ प्यार दिखाएं , चर सेट करें।) लेकिन असली टेक- ऑफ यह है कि "अगर स्थिति मौजूद नहीं है "या इसके विपरीत" अगर बाहर निकलने की स्थिति है "ज़ोर से पढ़ा जा सकता है और उनका अर्थ समझा सकता है। हालाँकि, यह अंतिम एक बहुत ही महत्वाकांक्षी हो सकता है क्योंकि शब्द exit
को देखने से आपको लग सकता है कि यह स्क्रिप्ट से बाहर निकल रहा है, जब वास्तव में यह $(...)
सबमिशन से बाहर निकल रहा है ।
** यदि आप return 1
असत्य के लिए उपयोग करने के लिए पूरी तरह से जोर देते हैं , तो मैं आपको return 255
इसके बजाय कम से कम उपयोग करने का सुझाव देता हूं । यह आपके भविष्य के स्वयं, या किसी भी अन्य डेवलपर का कारण होगा, जिसे आपके कोड को "यह 255 क्यों है?" तब वे कम से कम ध्यान दे रहे होंगे और गलती से बचने का बेहतर मौका होगा।
function
कीवर्ड ड्रॉप करें ,myfun() {...}
पर्याप्त