पर्यावरण चर बनाम शैल चर, क्या अंतर है?


56

किसी ने मुझे बताया कि:

BASH एक पर्यावरण चर नहीं है, यह एक शेल चर है

क्या फर्क पड़ता है?


एक ही बात की तरह लगता है बस एक अलग गुंजाइश है?
अलेक्जेंडर मिल्स

जवाबों:


35

$BASHएक स्थानीय चर है जो केवल वर्तमान (बैश) शेल में मान्य है।

पर्यावरण चर जैसे $SHELLवैध प्रणालीबद्ध। एक मौजूदा बैश खोल में, $BASHके निष्पादन के पथ की ओर इशारा करता बैश , जबकि $SHELLखोल करने के लिए अंक डिफ़ॉल्ट (जो एक ही मूल्य का हो सकता है) के रूप में परिभाषित।

वातावरण चर का एक विवरण के लिए देखें पर्यावरण चर उबंटू सहायता में।


1
एक बढ़िया लिंक (+1) :)
पीटर

12
यह उत्तर गलत / गलत है। पर्यावरण चर वैश्विक / सिस्टम-व्यापी नहीं हैं। शेल चर वर्तमान में चल रहे शेल के लिए निजी हैं , और वे किसी भी बच्चे की प्रक्रियाओं के लिए निर्यात नहीं किए गए (पास किए गए) हैं। पर्यावरण चर किसी भी बच्चे की प्रक्रियाओं को निर्यात किया जाता है। "MYVAR = Private; Export OurVAR = साझा; Printenv" केवल "OurVAR" को रिपोर्ट करेगा, क्योंकि जब शेल Printenv कमांड को निष्पादित करता है, तो वह OurVAR को निर्यात करता है, लेकिन MYVAR को नहीं।
CM

2
+1 से सीएम की टिप्पणी! मैंने कभी नहीं सुना अंतर इतना सरल और सटीक समझाया है !!! इस टिप्पणी का जवाब होना चाहिए।
जेसी द विंड वांडरर

48

एक पर्यावरण चर एक कार्यक्रम में और यह बच्चे के कार्यक्रमों में विश्व स्तर पर उपलब्ध है। एक शेल वैरिएबल केवल वर्तमान शेल में उपलब्ध है। शेल चर को पर्यावरण चर के रूप में उपलब्ध कराने के लिए, export VARNAME(डॉलर के बिना $) का उपयोग करें ।

स्पष्टीकरण के उदाहरण:

$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR

पर्यावरण चर को परिभाषित करने का दूसरा तरीका:

$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE

मुझे नहीं लगता कि यह सही है। exportजरूरी नहीं कि एक पर्यावरण चर निर्धारित किया जाए। stackoverflow.com/questions/7411455/…
क्रिस स्ट्रीक्जाइनस्की

3
@ChrisStryczynski exportबच्चे प्रक्रियाओं के लिए एक पर्यावरण चर सेट करता है। आपके द्वारा जोड़ा गया पद इस उत्तर का खंडन नहीं करता है, क्या आप स्पष्ट कर सकते हैं कि आपको क्यों लगता है कि यह गलत है?
१२:१२ पर १२

exportबिल्कुल एक पर्यावरण चर सेट
डेविड टोनहोफर

9

इसमे अंतर है। शेल वैरिएबल्स और एनवायरनमेंट वेरिएबल्स इसे बेहतर तरीके से समझाएंगे जो मैं कर सकता हूं, लेकिन यहां इसका एक अंश है:

यदि कोई परिवर्तन शेल चर के लिए किया जाता है, तो परिवर्तन को देखने के लिए किसी भी कांटेदार उपप्रकारों के लिए संबंधित परिवेश चर के लिए स्पष्ट रूप से "निर्यात" किया जाना चाहिए। याद रखें कि शेल चर उस शेल के लिए स्थानीय हैं जिसमें उन्हें परिभाषित किया गया था।


मैं अपना जवाब कमेंट कर रहा हूं .. मुझे वास्तव में टककट के उत्तर में हेल्प उबंटू लिंक पसंद है ... (यह मेरी तुलना में बेहतर है)
पीटर

3
साथ ही आपका लिंक अब काम नहीं करता है!

1

शेल वैरिएबल: शॉर्ट टर्म, केवल शेल के वर्तमान उदाहरण पर लागू होता है, लागू सिस्टम चौड़ा नहीं

पर्यावरण के अनुकूल: दीर्घकालिक उपयोग, मान्य प्रणाली वाइड, विश्व स्तर पर अनुमति है

कन्वेंशन द्वारा शेल वैरिएबल का नाम लोअरकेस के रूप में है जबकि एनवन। चर को अपरकेस के रूप में लिखा जाता है


-1

इस प्रश्न का उत्तर देने के लिए पहले एक चर के दायरे को समझने का प्रयास करें।

जब आप एक नया वैरिएबल बनाते हैं, जैसे कि SOME_ENV_VARIABLE="testing.txt"यह अंदर रहता है SHELL scope, तो इसका मतलब यह है कि इसे शेल के उस उदाहरण से एक्सेस किया जा सकता है जहां उपयोगकर्ता लॉग इन है। उदाहरण के लिए जब आप एक नया टर्मिनल खोलते हैं या आप शेल को बदलते हैं (उदाहरण के लिए) पर स्विच करें csh) आप उस चर तक नहीं पहुँच सकते।

जब आप की तरह है कि चर निर्यात export SOME_ENV_VARIABLEकि चर अब में मतलब यह है कि पर्यावरण दायरे में उपलब्ध है, कि उदाहरण के लिए यदि आप खोल आप कर सकते हैं बदलने के लिए अभी भी है कि चर का उपयोग। निम्नलिखित उदाहरण के साथ समझने की कोशिश करते हैं:

[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.

सादृश्य: मान लें कि आपके पास एक दो बेडरूम का अपार्टमेंट है और आप इसे दूसरे रूममेट के साथ साझा कर रहे हैं। आम क्षेत्र को किसी के द्वारा भी एक्सेस किया जा सकता है लेकिन आपके बेडरूम में नहीं, पर्यावरण चर क्षेत्र की तरह सामान्य है और शेल वैरिएबल बेडरूम की तरह है, यदि आप सामान्य क्षेत्र में कुछ करेंगे तो इसे किसी के द्वारा भी एक्सेस किया जा सकता है लेकिन यदि आप इसे अपने बेडरूम में रख सकते हैं तो यह केवल आपके द्वारा पहुँचा जा सकता है।

याद रखें कि नया टर्मिनल खोलने पर आप या तो चर का उपयोग नहीं कर पाएंगे क्योंकि आप उस उदाहरण को बदल रहे हैं । उसके लिए आपको .profileया तो अपने चरों को जोड़ना चाहिए या .bashrc(यदि आप बैश का उपयोग कर रहे हैं)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.