मैं एक पटकथा लिखने के लिए जा रहा हूँ और यह वहाँ के बीच कोई अंतर नहीं है दिखता है:मार: बनाम के बीच "निर्यात k = 1" अंतर "कश्मीर = 1"
export k=1
और
k=1
क्या मैं सही हूँ?
मैं एक पटकथा लिखने के लिए जा रहा हूँ और यह वहाँ के बीच कोई अंतर नहीं है दिखता है:मार: बनाम के बीच "निर्यात k = 1" अंतर "कश्मीर = 1"
export k=1
और
k=1
क्या मैं सही हूँ?
हर प्रक्रिया, यहां तक कि विंडोज पर, वातावरण ब्लॉक रूप में जाना जाता स्मृति का एक ब्लॉक है, इस वातावरण चर शामिल हैं। जब एक नई प्रक्रिया बनाई जाती है, डिफ़ॉल्ट रूप से, मूल प्रक्रिया का पर्यावरण ब्लॉक बच्चे को कॉपी किया जाता है, इसलिए पर्यावरण चर एक बच्चे की प्रक्रिया में टेक्स्ट डेटा पास करने का एक आसान तरीका है।
export
कमांड एक पर्यावरण चर बनाता है, या एक सामान्य स्थानीय चर को एक पर्यावरण चर में परिवर्तित करता है। सी-शैल में, इसकी कुछ रिडीमिंग सुविधाओं में से एक यह है कि यह स्थानीय चर() में पर्यावरण चर (setenv
) के लिए एक अलग वाक्यविन्यास का उपयोग करता है। बॉर्न शेल डेरिवेटिव्स, जैसे बैश और कॉर्न शैल, वह सब छुपाएं।
वर्तमान में, केवल सरल मान पास किए जा सकते हैं, इसलिए सरणी जैसे आइटम समर्थित नहीं हैं (यह केवल पहले तत्व को निर्यात करता है)। परिवर्तनीय विशेषताओं, define
का उपयोग करके सेट, तब भी निर्यात नहीं किए जाते हैं जब तक कि बाल प्रक्रिया एक ही प्रकार का खोल नहीं है, यानी बैश का एक और उदाहरण। यह निर्यात किए गए कार्यों पर भी लागू होता है, हालांकि कभी-कभी इसे विभिन्न प्रकार के गोले के बीच हैक करना संभव है (eval
का उपयोग करके)।
बैश (और अन्य) में एक शेल सेटिंग है जिसे allexport
कहा जाता है जिसका अर्थ है कि सभी चर पर्यावरण परिवेश हैं - शायद आम तौर पर एक बुरा विचार है।आप execve
का उपयोग कर सी जैसे भाषाओं से एक अलग वातावरण ब्लॉक प्रदान कर सकते हैं, लेकिन खोल से आपको env
जैसे प्रोग्राम की आवश्यकता है, विवरण के लिए man env
देखें।
export
परिवर्तक subprocesses के लिए उपलब्ध बनाता है।
यह है कि, यदि आप अपनी स्क्रिप्ट से एक नई प्रक्रिया को जन्म देते हैं, तो वेरिएबल k
उस सबप्रोसेस तक उपलब्ध नहीं होगा जब तक कि आप export
नहीं करते। ध्यान दें कि यदि आप इस चर को उपप्रोसेसर में बदलते हैं जो बदलता है तो मूल प्रक्रिया में दिखाई नहीं देगा।
अधिक जानकारी के लिए this doc के अनुभाग 3.2.3 देखें।
मैं एक सरल स्क्रिप्ट बनाने के बाद अंतर दिखाने के लिए:
$ cat script.sh
echo $answer
आइए परीक्षण के बिना export
$ answer=42
$ ./script.sh
$ . script.sh
42
मूल्य में जाना जाता है केवल ही प्रक्रिया का उपयोग कर स्क्रिप्ट को निष्पादित करने के लिए करता है, तो (यानी, bash
उदाहरण source
/.
का उपयोग करके)
, export
का उपयोग कर:
$ export answer=42
$ ./script.sh
42
$ . script.sh
42
मूल्य उपप्रक्रिया जाना जाता है।
इस प्रकार, यदि आप उपप्रकारों द्वारा किसी चर के मान को जानना चाहते हैं तो आपको export
का उपयोग करना चाहिए।
संक्षेप में और बिंदु पर। +1 –