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 বিট) বা এটি প্রত্যাশিত আচরণ?
সম্পাদনা: সমাধান করা হয়েছে। @ মার্কপ্লটনিক দ্বারা উল্লিখিত হিসাবে এটি অবশ্যই প্রত্যাশিত আচরণ।
var
খালি? var
বিশ্বব্যাপী সেট করা আছে innerFunc
, সুতরাং স্ক্রিপ্টের শেষ না হওয়া পর্যন্ত এটি কেন আটকে থাকবে না?