शेल चरों के बीच अंतर जो निर्यात किए जाते हैं और जो बाश में नहीं हैं


41

बैश उन चरों के बीच अंतर करता है जो निर्यात किए गए हैं और जो नहीं हैं।

उदाहरण:

$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR

setचर देखता है, लेकिन envनहीं करता है।

$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR

setदोनों चर envदेखता है, लेकिन केवल निर्यात चर देखता है।

मुझे पता है कि setबैश बिलियन है और envनहीं है।

जो निर्यात किए जाते हैं और जो नहीं हैं, उनके बीच अंतर क्या हैं?


17
शब्दावली नोट: एक "पर्यावरण चर" हमेशा निर्यात किया जाता है। एक गैर-निर्यात चर एक "शेल चर" (या "पैरामीटर") है।
गिल्स एसओ- बुराई को रोकें '

जवाबों:


44

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

शेल निर्दिष्ट नामों के अनुरूप चर को निर्यात विशेषता देगा, जिससे उन्हें बाद में निष्पादित आदेशों के वातावरण में हो जाएगा।

setवर्तमान वातावरण को आउटपुट करता है, जिसमें कोई भी स्थानीय गैर-निर्यात चर शामिल है। envएक नए वातावरण में प्रोग्राम लॉन्च करने के लिए उपयोग किया जाता है, और बिना किसी तर्क के आउटपुट देगा कि नया वातावरण क्या होगा। चूंकि envएक नया वातावरण बना रहा है, केवल निर्यात किए गए चर के माध्यम से लाया जाता है, जैसा कि उस शेल से लॉन्च किए गए किसी भी कार्यक्रम के लिए होता है। उदाहरण के लिए, पहले के भीतर एक दूसरे शेल को खोलना (मैं $$आंतरिक शेल में संकेतों का प्रतिनिधित्व करता था):

$ FOO=BAR
$ bash
$$ echo $FOO             # Note the empty line

$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$

ध्यान दें कि यह वह चर है जो निर्यात किया गया है, न कि केवल इसका मूल्य। इसका मतलब है कि आप एक बार export FOO, FOOएक वैश्विक चर और शो के बाद के वातावरण में हो जाता है, भले ही बाद में बदला:

$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$

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