शैल चर बनाम पर्यावरण चर
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=fooset -a
उद्धृत करने पर
कोटेशन ज्यादातर ऑर्थोगोनल है। यदि आप वैरिएबल को असाइन कर रहे हैं, तो ऐसा कोई वर्ण नहीं है जो शेल के लिए विशेष है, तो आपको किसी भी उद्धरण की आवश्यकता नहीं है। यदि विशेष वर्ण हैं, तो आपको उन्हें एकल उद्धरण या दोहरे उद्धरण या बैकस्लैश या उसके संयोजन के साथ सुरक्षित करने की आवश्यकता है। यह सादे myvar=valueवाक्यविन्यास और exportउपयोगिता दोनों के लिए जाता है ।
असाइनमेंट सिंटैक्स और सिंटैक्स के बीच एक अंतर है export। शेल $fooआगे चर प्रतिस्थापन के परिणामों को विस्तार देता है , प्रदर्शन क्षेत्र (शब्द) विभाजन और pathname विस्तार (ग्लोबिंग) । इसका मतलब है कि यदि मान myvarहै hello *, तो वर्तमान निर्देशिका में फ़ाइलों की सूची के बाद एक एकल स्थान के बाद echo $myvarप्रिंट helloहोता है। यह लगभग कभी वांछनीय नहीं है, इसलिए सामान्य सिद्धांत हमेशा चर प्रतिस्थापन के आसपास दोहरे उद्धरण चिह्नों का उपयोग करता है (जब तक कि आपको पता नहीं है कि आपको pathname विस्तार या क्षेत्र विभाजन की आवश्यकता है) echo "$myvar":। एक साधारण असाइनमेंट के मामले में, othervar=$myvarवास्तव में मज़बूती से मूल्य को कॉपी करता myvarहैothervar, क्योंकि ग्लोबिंग और वर्ड स्प्लिटिंग असाइनमेंट्स में हिचकते हैं (क्योंकि वे कई शब्द बनाते हैं, लेकिन एक ही शब्द अपेक्षित होता है)। exportहालाँकि यह वितरण लागू नहीं होता है । इसलिए यदि आप एक सरल नियम को याद रखना चाहते हैं, तो बस चर प्रतिस्थापन के आसपास दोहरे उद्धरण चिह्नों का उपयोग करें।