क्या कोई मुझे समझा सकता है कि नीचे यह सरल उदाहरण क्यों काम नहीं करता है।

इस उदाहरण में, "सहायक" फ़ंक्शन में पैरामीटर ("सेटवी" और "गेटवी") के रूप में एक अलग फ़ंक्शन होता है। "सेटवी" फ़ंक्शन के भीतर, चर का मान अपडेट किया जाता है। फिर भी, "getV" फ़ंक्शन के भीतर का मान पुराना मान बना रहता है। इसका कारण क्या है?

vari="Oh no... I'm old."

function init() {
    helper setV
    helper getV
}
 
function helper() {
    ($1)
}
 
function setV() {
    vari="Hey! I'm new!"
}
 
function getV() {
    echo $vari
}
 
init
1
Jasper 21 जुलाई 2020, 23:48

1 उत्तर

सबसे बढ़िया उत्तर

($1) में माता-पिता $1 को सबशेल में निष्पादित करने का कारण बनते हैं। इसका मतलब यह है कि जब सबशेल बाहर निकलता है तो कोई भी पर्यावरण/चर परिवर्तन खो जाता है।

अवलोकन करना:

$ x=; setx() { x=Y; }; echo "1 x=$x"; (setx); echo "2 x=$x"; setx; echo "3 x=$x"
1 x=
2 x=
3 x=Y

यदि आप चाहते हैं कि परिवर्तनशील परिवर्तन जीवित रहें, तो कमांड को सबशेल में न रखें।

प्रलेखन

man bash से:

(सूची)
list एक उपकोश वातावरण में क्रियान्वित किया जाता है (देखें COMMAND निष्पादन पर्यावरण नीचे)। वैरिएबल असाइनमेंट और बिल्टिन शेल के वातावरण को प्रभावित करने वाले आदेश प्रभावी नहीं रहते हैं आदेश पूरा होने के बाद। वापसी की स्थिति किसकी निकास स्थिति है? list. [महत्व जोड़ें]

1
John1024 22 जुलाई 2020, 00:00