अन्य उत्तरों के साथ समस्या यह है कि वे या तो एक वैश्विक का उपयोग करते हैं, जिसे एक कॉल श्रृंखला में कई फ़ंक्शन होने पर अधिलेखित किया जा सकता है, या echo
जिसका अर्थ है कि आपका फ़ंक्शन नैदानिक जानकारी को आउटपुट नहीं कर सकता है (आप अपने फ़ंक्शन को यह भूल जाएंगे और "परिणाम", अर्थात वापस आ जाएंगे। मूल्य, आपके कॉलर अपेक्षा से अधिक जानकारी समाहित करेगा, अजीब बग के लिए अग्रणी), याeval
जो बहुत भारी और हैक्सी है।
ऐसा करने का उचित तरीका एक फ़ंक्शन में शीर्ष स्तर का सामान डालना और local
बैश के गतिशील स्कूपिंग नियम के साथ उपयोग करना है । उदाहरण:
func1()
{
ret_val=hi
}
func2()
{
ret_val=bye
}
func3()
{
local ret_val=nothing
echo $ret_val
func1
echo $ret_val
func2
echo $ret_val
}
func3
यह आउटपुट
nothing
hi
bye
डायनेमिक स्कूपिंग का मतलब है कि ret_val
कॉलर के आधार पर एक अलग वस्तु की ओर इशारा करना! यह लेक्सिकल स्कूपिंग से अलग है, जो कि अधिकांश प्रोग्रामिंग भाषाएं उपयोग करती हैं। यह वास्तव में एक प्रलेखित विशेषता है , बस याद करना आसान है, और बहुत अच्छी तरह से समझाया नहीं गया है, यहां इसके लिए दस्तावेज है (जोर मेरा है):
फ़ंक्शन के लिए चर स्थानीय बिल्डिन के साथ स्थानीय घोषित किए जा सकते हैं। ये चर केवल फ़ंक्शन और आदेशों के लिए दृश्यमान होते हैं ।
C / C ++ / Python / Java / C # / javascript बैकग्राउंड वाले किसी व्यक्ति के लिए, यह संभवतः सबसे बड़ी बाधा है: bash में फ़ंक्शन फ़ंक्शंस नहीं होते हैं, वे कमांड होते हैं, और इस तरह व्यवहार करते हैं: वे stdout
/ के लिए आउटपुट कर सकते हैंstderr
कर सकते हैं, वे इसमें पाइप कर सकते हैं / बाहर, वे एक निकास कोड वापस कर सकते हैं। मूल रूप से एक स्क्रिप्ट में एक कमांड को परिभाषित करने और एक निष्पादन योग्य बनाने के बीच कोई अंतर नहीं है जिसे कमांड लाइन से बुलाया जा सकता है।
इसलिए इस तरह से अपनी स्क्रिप्ट लिखने के बजाय:
top-level code
bunch of functions
more top-level code
इसे इस तरह लिखें:
# define your main, containing all top-level code
main()
bunch of functions
# call main
main
जहां के रूप में main()
घोषित ret_val
किया गया है local
और अन्य सभी कार्यों के माध्यम से मान लौटाते हैं ret_val
।
निम्नलिखित यूनिक्स और लिनक्स प्रश्न भी देखें: शेल फ़ंक्शंस में स्थानीय चर के दायरे ।
एक और, शायद स्थिति के आधार पर बेहतर समाधान भी, हां.टेक द्वारा पोस्ट किया गया है जो उपयोग करता है local -n
।
return
आपके मामले में अनिवार्य रूप से वही हैexit code
जो कि सीमा से है0 - 255
।echo
@ सेप्टि द्वारा सुझाए अनुसार उपयोग करें । बाहर निकलें कोड के साथ कब्जा किया जा सकता है$?
।