पैरामीटर और अन्य प्रकार के विस्तार तब किए जाते हैं जब कमांड पढ़ा जाता है, इससे पहले कि यह निष्पादित हो।
पहला संस्करण, LANG=Ja_JP bash -c "echo $LANG"एक एकल आदेश है। के बाद इसे इस तरह से पार्स किया जाता है, कुछ भी निष्पादित होने $LANGसे en_USपहले इसका विस्तार किया जाता है। एक बार bashइनपुट संसाधित करने के बाद, यह एक प्रक्रिया की मांग करता है, LANG=Ja_JPजैसा कि अपेक्षित है, पर्यावरण में जोड़ता है और फिर निष्पादित होता है bash -c echo en_US।
आप सिंगल कोट्स यानी LANG=Ja_JP bash -c 'echo $LANG'आउटपुट के साथ विस्तार को रोक सकते हैं Ja_JP।
ध्यान दें कि जब आपके पास एक कमांड के हिस्से के रूप में एक चर असाइनमेंट होता है, तो असाइनमेंट केवल उस कमांड के वातावरण को प्रभावित करता है न कि आपके शेल के।
दूसरा संस्करण, LANG=Ja_JP; bash -c "echo $LANG"वास्तव में अनुक्रम में निष्पादित दो अलग-अलग कमांड हैं। पहला एक कमांड के बिना एक सरल चर असाइनमेंट है, इसलिए यह आपके वर्तमान शेल को प्रभावित करता है।
इस प्रकार, आपके दो स्निपेट एकल के सतही भेद के बावजूद मौलिक रूप से भिन्न हैं ;।
पूरी तरह से बंद विषय, लेकिन मैं .UTF-8जब एक सेटिंग की सिफारिश कर सकते हैं LANG। आजकल 21 वीं सदी में यूनिकोड का उपयोग न करने का कोई अच्छा कारण नहीं है।