स्थानीय चर
अब तक हमने जो स्क्रिप्ट लिखी हैं, उनमें सभी चर (स्थिरांक सहित) रहे हैं सार्वत्रिक चर. वैश्विक चर पूरे कार्यक्रम में अपना अस्तित्व बनाए रखते हैं। यह कई चीज़ों के लिए ठीक है, लेकिन यह कभी-कभी शेल फ़ंक्शंस के उपयोग को जटिल बना सकता है। शेल फ़ंक्शंस के अंदर, यह अक्सर वांछनीय होता है स्थानीय चर. स्थानीय चर केवल शेल फ़ंक्शन के भीतर ही पहुंच योग्य होते हैं जिसमें उन्हें परिभाषित किया जाता है और शेल फ़ंक्शन समाप्त होने के बाद उनका अस्तित्व समाप्त हो जाता है।
स्थानीय चर होने से प्रोग्रामर को उन नामों के साथ चर का उपयोग करने की अनुमति मिलती है जो पहले से ही मौजूद हो सकते हैं, या तो विश्व स्तर पर स्क्रिप्ट में या अन्य शेल फ़ंक्शंस में, संभावित नाम विवादों के बारे में चिंता किए बिना।
यहां एक उदाहरण स्क्रिप्ट है जो दर्शाती है कि स्थानीय चर को कैसे परिभाषित और उपयोग किया जाता है:
#! / Bin / bash
# स्थानीय-संस्करण: स्थानीय चर प्रदर्शित करने के लिए स्क्रिप्ट
#! / Bin / bash
# स्थानीय-संस्करण: स्थानीय चर प्रदर्शित करने के लिए स्क्रिप्ट
फू=0
# वैश्विक चर foo
फू=0
function_1 () {
स्थानीय फू # वेरिएबल फू स्थानीय से funct_1 foo=1
प्रतिध्वनि "funct_1: foo = $foo"
}
function_2 () {
स्थानीय फू # वेरिएबल फू स्थानीय से funct_2 foo=2
प्रतिध्वनि "funct_2: foo = $foo"
}
इको "वैश्विक: foo = $foo" funct_1
function_1 () {
स्थानीय फू # वेरिएबल फू स्थानीय से funct_1 foo=1
प्रतिध्वनि "funct_1: foo = $foo"
}
function_2 () {
स्थानीय फू # वेरिएबल फू स्थानीय से funct_2 foo=2
प्रतिध्वनि "funct_2: foo = $foo"
}
इको "वैश्विक: foo = $foo" funct_1
स्थानीय चर
इको "वैश्विक: foo = $foo" funct_2
इको "वैश्विक: foo = $foo"
इको "वैश्विक: foo = $foo" funct_2
इको "वैश्विक: foo = $foo"
जैसा कि हम देख सकते हैं, स्थानीय चर को शब्द के साथ चर नाम से पहले परिभाषित किया जाता है स्थानीय. यह एक वेरिएबल बनाता है जो उस शेल फ़ंक्शन के लिए स्थानीय है जिसमें इसे परिभाषित किया गया है। एक बार शेल फ़ंक्शन के बाहर, वेरिएबल अब मौजूद नहीं है। जब हम इस स्क्रिप्ट को चलाते हैं, तो हम परिणाम देखते हैं:
[मुझे@लिनक्सबॉक्स ~]$ स्थानीय-संस्करण
वैश्विक: foo = 0 funct_1: foo = 1 वैश्विक: foo = 0 funct_2: foo = 2 वैश्विक: foo = 0
[मुझे@लिनक्सबॉक्स ~]$ स्थानीय-संस्करण
वैश्विक: foo = 0 funct_1: foo = 1 वैश्विक: foo = 0 funct_2: foo = 2 वैश्विक: foo = 0
हम देखते हैं कि स्थानीय चर के लिए मानों का असाइनमेंट foo दोनों शेल फ़ंक्शंस के मान पर कोई प्रभाव नहीं पड़ता है foo कार्यों के बाहर परिभाषित।
यह सुविधा शेल फ़ंक्शंस को लिखने की अनुमति देती है ताकि वे एक-दूसरे से और उस स्क्रिप्ट से स्वतंत्र रहें जिसमें वे दिखाई देते हैं। यह बहुत मूल्यवान है, क्योंकि यह प्रोग्राम के एक हिस्से को दूसरे हिस्से में हस्तक्षेप करने से रोकने में मदद करता है। यह शेल फ़ंक्शंस को लिखने की भी अनुमति देता है ताकि वे पोर्टेबल हो सकें। अर्थात्, आवश्यकतानुसार उन्हें एक स्क्रिप्ट से दूसरी स्क्रिप्ट में काटा और चिपकाया जा सकता है।