शैल चर बनाम पर्यावरण चर
MY_HOME="/home/my_user"
सेट खोल चर बुलाया MY_HOME
। शैल प्रोग्रामिंग भाषाएं हैं, और इनमें चर (जिन्हें पैरामीटर भी कहा जाता है) हैं। इस असाइनमेंट के बाद, आप चर के मान का उपयोग कर सकते हैं, जैसे कि echo "$MY_HOME"
।
शेल चर एक आंतरिक शेल अवधारणा है। जब वह शेल आवृत्ति समाप्त हो जाती है, MY_HOME
तो भूल जाती है। प्रत्येक कार्यक्रम के बारे में जो जानता है और अपने बच्चों को प्रसारित करता है वह पर्यावरण चर है ।
शेल के अंदर, पर्यावरण चर और शेल चर बहुत समान तरीकों से काम करते हैं। वास्तव में क्या होता है कि सभी पर्यावरण चर जो शेल अपने माता-पिता से विरासत में प्राप्त होते हैं, वे शेल चर बन जाते हैं। इसके विपरीत, एक शेल वैरिएबल जो एक शेल स्क्रिप्ट में परिभाषित किया गया है यदि आप इसे निर्यात करते हैं तो एक पर्यावरण चर बन जाएगा ।
export MY_HOME="/home/my_user"
अधिक विवरण आप पहले पढ़ने पर छोड़ सकते हैं
शेल चर स्वचालित रूप से पर्यावरण चर नहीं बनने का कारण आंशिक रूप से यह है कि एक स्क्रिप्ट गलती से एक चर नाम का उपयोग कर सकती है जो उस प्रोग्राम के लिए सार्थक है जो इसे लॉन्च करता है, और आंशिक रूप से सिर्फ ऐतिहासिक है।
कुछ बहुत पुराने गोले export
हर बार इस्तेमाल किए जाने के लिए आवश्यक होते हैं जब आप एक चर नाम बदल देते हैं, लेकिन सभी आधुनिक गोले पर्यावरण चर के लिए असाइनमेंट का ट्रैक रखते हैं, ताकि निम्नलिखित स्निपेट गूँज हो bar
:
myvar=foo
export myvar
myvar=bar
env | grep '^myvar='
इसके अलावा, कुछ बहुत पुराने गोले के लिए अलग आदेशों की आवश्यकता myvar=foo
और export myvar
है, लेकिन सभी आधुनिक गोले को समझने export myvar=foo
।
आप set -a
सभी शेल वैरिएबल असाइनमेंट बनाने के लिए स्वचालित रूप से वेरिएबल एक्सपोर्ट कर सकते हैं, इसलिए यदि आप पहले उस शेल में भागते हैं तो myvar=foo
यह बराबर है ।export myvar=foo
set -a
उद्धृत करने पर
कोटेशन ज्यादातर ऑर्थोगोनल है। यदि आप वैरिएबल को असाइन कर रहे हैं, तो ऐसा कोई वर्ण नहीं है जो शेल के लिए विशेष है, तो आपको किसी भी उद्धरण की आवश्यकता नहीं है। यदि विशेष वर्ण हैं, तो आपको उन्हें एकल उद्धरण या दोहरे उद्धरण या बैकस्लैश या उसके संयोजन के साथ सुरक्षित करने की आवश्यकता है। यह सादे myvar=value
वाक्यविन्यास और export
उपयोगिता दोनों के लिए जाता है ।
असाइनमेंट सिंटैक्स और सिंटैक्स के बीच एक अंतर है export
। शेल $foo
आगे चर प्रतिस्थापन के परिणामों को विस्तार देता है , प्रदर्शन क्षेत्र (शब्द) विभाजन और pathname विस्तार (ग्लोबिंग) । इसका मतलब है कि यदि मान myvar
है hello *
, तो वर्तमान निर्देशिका में फ़ाइलों की सूची के बाद एक एकल स्थान के बाद echo $myvar
प्रिंट hello
होता है। यह लगभग कभी वांछनीय नहीं है, इसलिए सामान्य सिद्धांत हमेशा चर प्रतिस्थापन के आसपास दोहरे उद्धरण चिह्नों का उपयोग करता है (जब तक कि आपको पता नहीं है कि आपको pathname विस्तार या क्षेत्र विभाजन की आवश्यकता है) echo "$myvar"
:। एक साधारण असाइनमेंट के मामले में, othervar=$myvar
वास्तव में मज़बूती से मूल्य को कॉपी करता myvar
हैothervar
, क्योंकि ग्लोबिंग और वर्ड स्प्लिटिंग असाइनमेंट्स में हिचकते हैं (क्योंकि वे कई शब्द बनाते हैं, लेकिन एक ही शब्द अपेक्षित होता है)। export
हालाँकि यह वितरण लागू नहीं होता है । इसलिए यदि आप एक सरल नियम को याद रखना चाहते हैं, तो बस चर प्रतिस्थापन के आसपास दोहरे उद्धरण चिह्नों का उपयोग करें।