2012-09-24 6 views

उत्तर

14

हर प्रक्रिया, यहां तक ​​कि विंडोज पर, वातावरण ब्लॉक रूप में जाना जाता स्मृति का एक ब्लॉक है, इस वातावरण चर शामिल हैं। जब एक नई प्रक्रिया बनाई जाती है, डिफ़ॉल्ट रूप से, मूल प्रक्रिया का पर्यावरण ब्लॉक बच्चे को कॉपी किया जाता है, इसलिए पर्यावरण चर एक बच्चे की प्रक्रिया में टेक्स्ट डेटा पास करने का एक आसान तरीका है।

export कमांड एक पर्यावरण चर बनाता है, या एक सामान्य स्थानीय चर को एक पर्यावरण चर में परिवर्तित करता है। सी-शैल में, इसकी कुछ रिडीमिंग सुविधाओं में से एक यह है कि यह स्थानीय चर() में पर्यावरण चर (setenv) के लिए एक अलग वाक्यविन्यास का उपयोग करता है। बॉर्न शेल डेरिवेटिव्स, जैसे बैश और कॉर्न शैल, वह सब छुपाएं।

वर्तमान में, केवल सरल मान पास किए जा सकते हैं, इसलिए सरणी जैसे आइटम समर्थित नहीं हैं (यह केवल पहले तत्व को निर्यात करता है)। परिवर्तनीय विशेषताओं, define का उपयोग करके सेट, तब भी निर्यात नहीं किए जाते हैं जब तक कि बाल प्रक्रिया एक ही प्रकार का खोल नहीं है, यानी बैश का एक और उदाहरण। यह निर्यात किए गए कार्यों पर भी लागू होता है, हालांकि कभी-कभी इसे विभिन्न प्रकार के गोले के बीच हैक करना संभव है (eval का उपयोग करके)।

बैश (और अन्य) में एक शेल सेटिंग है जिसे allexport कहा जाता है जिसका अर्थ है कि सभी चर पर्यावरण परिवेश हैं - शायद आम तौर पर एक बुरा विचार है।आप execve का उपयोग कर सी जैसे भाषाओं से एक अलग वातावरण ब्लॉक प्रदान कर सकते हैं, लेकिन खोल से आपको env जैसे प्रोग्राम की आवश्यकता है, विवरण के लिए man env देखें।

34

export परिवर्तक subprocesses के लिए उपलब्ध बनाता है।

यह है कि, यदि आप अपनी स्क्रिप्ट से एक नई प्रक्रिया को जन्म देते हैं, तो वेरिएबल k उस सबप्रोसेस तक उपलब्ध नहीं होगा जब तक कि आप export नहीं करते। ध्यान दें कि यदि आप इस चर को उपप्रोसेसर में बदलते हैं जो बदलता है तो मूल प्रक्रिया में दिखाई नहीं देगा।

अधिक जानकारी के लिए this doc के अनुभाग 3.2.3 देखें।

+0

संक्षेप में और बिंदु पर। +1 –

18

मैं एक सरल स्क्रिप्ट बनाने के बाद अंतर दिखाने के लिए:

$ 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 का उपयोग करना चाहिए।