24.2 पढ़ने के बाद । स्थानीय चर , मैंने सोचा था कि var
कीवर्ड के साथ एक चर घोषित करने का local
मतलब है कि var
फ़ंक्शन के घुंघराले ब्रेसिज़ द्वारा सीमांकित कोड के ब्लॉक के भीतर केवल मूल्य ही सुलभ था।
हालाँकि, निम्नलिखित उदाहरण को चलाने के बाद, मुझे पता चला कि var
कोड के उस ब्लॉक द्वारा आह्वान किए गए फ़ंक्शंस से भी एक्सेस किया जा सकता है, पढ़ा जा सकता है और लिखा जा सकता है - यानी भले ही var
घोषित किया local
गया हो outerFunc
, फिर innerFunc
भी इसे पढ़ने और इसके मूल्य में परिवर्तन करने में सक्षम है।
#!/usr/bin/env bash
function innerFunc() {
var='new value'
echo "innerFunc: [var:${var}]"
}
function outerFunc() {
local var='initial value'
echo "outerFunc: before innerFunc: [var:${var}]"
innerFunc
echo "outerFunc: after innerFunc: [var:${var}]"
}
echo "global: before outerFunc: [var:${var}]"
outerFunc
echo "global: after outerFunc: [var:${var}]"
आउटपुट:
global: before outerFunc: [var:] # as expected, `var` is not accessible outside of `outerFunc`
outerFunc: before innerFunc: [var:initial value]
innerFunc: [var:new value] # `innerFunc` has access to `var` ??
outerFunc: after innerFunc: [var:new value] # the modification of `var` by `innerFunc` is visible to `outerFunc` ??
global: after outerFunc: [var:]
प्रश्न: क्या मेरे खोल में एक बग (4.3.42, उबंटू 16.04, 64 बिट) है या यह अपेक्षित व्यवहार है?
संपादित करें: हल किया। जैसा कि @MarkPlotnick ने उल्लेख किया है, यह वास्तव में अपेक्षित व्यवहार है।
var
खाली है? var
में विश्व स्तर पर सेट किया गया है innerFunc
, तो यह स्क्रिप्ट के अंत तक क्यों नहीं चिपकता है?