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, तो यह स्क्रिप्ट के अंत तक क्यों नहीं चिपकता है?