शैल चर
शेल चर वे चर होते हैं जिनका दायरा वर्तमान शेल सत्र में होता है, उदाहरण के लिए एक इंटरैक्टिव शेल सत्र या एक स्क्रिप्ट में।
आप एक अप्रयुक्त नाम के लिए एक मान प्रदान करके एक शेल चर बना सकते हैं:
var="hello"
वर्तमान सत्र में डेटा का ट्रैक रखने के लिए शेल चरों का उपयोग किया जाता है। शेल वेरिएबल्स में आमतौर पर लोअर-केस अक्षरों के साथ नाम होते हैं।
पर्यावरण चर
एक पर्यावरण चर एक शेल चर है जिसे निर्यात किया गया है। इसका मतलब है कि यह एक चर के रूप में दिखाई देगा, न केवल शेल सत्र में जिसने इसे बनाया, बल्कि किसी भी प्रक्रिया के लिए (न केवल गोले) जो उस सत्र से शुरू किए गए हैं।
VAR="hello" # shell variable created
export VAR # variable now part of the environment
या
export VAR="hello"
एक बार शेल वैरिएबल एक्सपोर्ट हो जाने के बाद, यह तब तक एक्सपोर्ट होता रहता है, जब तक कि यह अनसेट नहीं हो जाता है, या जब तक इसकी "एक्सपोर्ट प्रॉपर्टी" (साथ export -n
में bash
) नहीं हट जाती है , इसलिए आमतौर पर इसे री-एक्सपोर्ट करने की कोई जरूरत नहीं है। एक चर को हटाने के साथ unset
इसे हटाना (कोई फर्क नहीं पड़ता कि यह पर्यावरण चर है या नहीं)।
bash
पर्यावरण के चर बनने के लिए और अन्य खोलों में ऐरे और एसोसिएटिव हैश का निर्यात नहीं किया जा सकता है। पर्यावरण चर सरल चर होने चाहिए जिनके मूल्य तार होते हैं, और उनके पास अक्सर ऊपरी-अक्षर वाले नाम होते हैं।
पर्यावरण चर का उपयोग वर्तमान शेल सत्र में डेटा का ट्रैक रखने के लिए है, लेकिन यह भी किसी भी प्रक्रिया को उस डेटा का हिस्सा लेने की अनुमति देने के लिए है। इसका विशिष्ट मामला PATH
पर्यावरण चर है, जिसे शेल में सेट किया जा सकता है और बाद में किसी भी प्रोग्राम द्वारा उपयोग किया जाता है जो उन्हें पूर्ण पथ निर्दिष्ट किए बिना प्रोग्राम शुरू करना चाहता है।
एक प्रक्रिया में पर्यावरण चर का संग्रह अक्सर "प्रक्रिया का वातावरण" के रूप में जाना जाता है। प्रत्येक प्रक्रिया का अपना वातावरण होता है।
पर्यावरण चर केवल "अग्रेषित" किया जा सकता है, अर्थात एक बच्चे की प्रक्रिया अपनी मूल प्रक्रिया में पर्यावरण चर को कभी नहीं बदल सकती है, और इसे शुरू करने पर एक बच्चे की प्रक्रिया के लिए पर्यावरण स्थापित करने के अलावा, एक माता पिता की प्रक्रिया मौजूदा पर्यावरण को नहीं बदल सकती है बच्चे की प्रक्रिया।
पर्यावरण चर को env
(बिना किसी तर्क के) सूचीबद्ध किया जा सकता है । इसके अलावा, वे शेल सत्र में गैर-निर्यात शेल चर के समान दिखाई देते हैं। यह शेल के लिए थोड़ा विशेष है क्योंकि अधिकांश अन्य प्रोग्रामिंग भाषाएं आमतौर पर पर्यावरण चर (नीचे देखें) के साथ "साधारण" वैरिएबल को रोकती नहीं हैं।
env
वर्तमान सत्र में उन्हें सेट किए बिना प्रक्रिया के वातावरण में एक या कई पर्यावरण चर के मूल्यों को निर्धारित करने के लिए भी उपयोग किया जा सकता है:
env CC=clang CXX=clang++ make
यह make
पर्यावरण वैरिएबल से शुरू होता CC
है जो वैल्यू पर सेट होता है clang
और से CXX
सेट होता है clang++
।
यह एक प्रक्रिया के लिए पर्यावरण को साफ करने के लिए भी इस्तेमाल किया जा सकता है:
env -i bash
यह शुरू होता है bash
लेकिन वर्तमान वातावरण को नई bash
प्रक्रिया में स्थानांतरित नहीं करता है (इसके पास अभी भी पर्यावरण चर होंगे क्योंकि यह अपनी शेल प्रारंभिक लिपियों से नए बनाता है)।
अंतर का उदाहरण
$ var="hello" # create shell variable "var"
$ bash # start _new_ bash session
$ echo "$var" # no output
$ exit # back to original shell session
$ echo "$var" # "hello" is outputted
$ unset var # remove variable
$ export VAR="hello" # create environment variable "VAR"
$ bash
$ echo "$VAR" # "hello" is outputted since it's exported
$ exit # back to original shell session
$ unset VAR # remove variable
$ ( export VAR="hello"; echo "$VAR" ) # set env. var "VAR" to "hello" in subshell and echo it
$ echo "$VAR" # no output since a subshell has its own environment
अन्य भाषाएँ
अधिकांश प्रोग्रामिंग भाषाओं में लाइब्रेरी फ़ंक्शन हैं जो पर्यावरण चर को प्राप्त करने और स्थापित करने की अनुमति देता है। ध्यान दें कि चूंकि पर्यावरण चर को एक साधारण कुंजी-मूल्य संबंध के रूप में संग्रहीत किया जाता है, वे आमतौर पर भाषा के "चर" नहीं होते हैं। एक प्रोग्राम एक कुंजी (पर्यावरण चर का नाम) के अनुरूप मूल्य (जो हमेशा एक चरित्र स्ट्रिंग है) प्राप्त कर सकता है, लेकिन फिर इसे एक पूर्णांक में बदलना होगा या जो भी डेटा प्रकार भाषा के मूल्य का अनुमान है।
सी में, वातावरण चर का उपयोग कर पहुँचा जा सकता है getenv()
, setenv()
, putenv()
और unsetenv()
। इन दिनचर्या के साथ बनाए गए चर को सी प्रोग्राम शुरू होने वाली किसी भी प्रक्रिया द्वारा उसी तरह विरासत में मिला है।
अन्य भाषाओं में एक ही चीज़ को पूरा करने के लिए विशेष डेटा संरचनाएं हो सकती हैं, जैसे %ENV
पर्ल में हैश, या ENVIRON
अधिकांश कार्यान्वयन में सहयोगी सरणी awk
।