कंप्यूटर विज्ञान (और आकस्मिक कंप्यूटिंग) में, एक चर स्मृति में एक स्थान है जो बाद में उपयोग के लिए मनमानी जानकारी रखता है। दूसरे शब्दों में, यह आपके लिए डेटा डालने और डेटा निकालने के लिए एक अस्थायी भंडारण कंटेनर है। बैश शेल में, वह डेटा एक शब्द हो सकता है (एक स्ट्रिंग , कंप्यूटर भाषा में) या एक संख्या (एक पूर्णांक .) )।
आपने अपने कंप्यूटर पर पहले कभी (जानबूझकर) एक चर का उपयोग नहीं किया होगा, लेकिन आपने शायद अपने जीवन के अन्य क्षेत्रों में एक चर का उपयोग किया है। जब आप "मुझे वह दें" या "इसे देखें" जैसी बातें कहते हैं, तो आप व्याकरणिक चर का उपयोग कर रहे हैं (आप उन्हें सर्वनाम के रूप में सोचते हैं ), क्योंकि "यह" और "वह" का अर्थ इस बात पर निर्भर करता है कि आप अपने दिमाग में जो कुछ भी चित्रित कर रहे हैं, या जो भी आप इंगित कर रहे हैं ताकि आपके दर्शकों को पता चल सके कि आप क्या कह रहे हैं। जब आप गणित करते हैं, तो आप अज्ञात मान के लिए चर का उपयोग करते हैं, भले ही आप इसे एक चर नहीं कहते हैं।
यहां एक बैश वैरिएबल का त्वरित और आसान प्रदर्शन है जिसे आप महसूस नहीं कर सकते कि आप हर दिन उपयोग करते हैं। PS1 वेरिएबल इस बारे में जानकारी रखता है कि आप अपने टर्मिनल प्रॉम्प्ट को कैसे दिखाना चाहते हैं। उदाहरण के लिए, आप इसे कुछ बहुत ही सरल—जैसे प्रतिशत चिह्न (% .) पर सेट कर सकते हैं )—PS1 . को फिर से परिभाषित करके चर:
$ PS1="% "
%
यह आलेख Linux, BSD, Mac, या Cygwin पर चलने वाले बैश शेल में चरों को संबोधित करता है। Microsoft के ओपन सोर्स पावरशेल के उपयोगकर्ताओं को पावरशेल में चर के बारे में मेरे लेख का संदर्भ लेना चाहिए।
चर किस लिए हैं?
आपको बैश में चर की आवश्यकता है या नहीं यह इस बात पर निर्भर करता है कि आप टर्मिनल में क्या करते हैं। कुछ उपयोगकर्ताओं के लिए, वेरिएबल डेटा को प्रबंधित करने का एक अनिवार्य साधन है, जबकि अन्य के लिए वे मामूली और अस्थायी सुविधाएं हैं, और अभी भी अन्य लोगों के लिए, वे मौजूद नहीं भी हो सकते हैं।
अंततः, चर एक उपकरण हैं। जब आप उनके लिए उपयोग पाते हैं तो आप उनका उपयोग कर सकते हैं, या यह जानकर आराम से उन्हें अकेला छोड़ सकते हैं कि वे आपके ओएस द्वारा प्रबंधित हैं। ज्ञान शक्ति है, हालांकि, और यह समझना कि बैश में चर कैसे काम करते हैं, आपको सभी प्रकार की अप्रत्याशित रचनात्मक समस्या-समाधान की ओर ले जा सकते हैं।
चर कैसे सेट करें
चर बनाने के लिए आपको विशेष अनुमतियों की आवश्यकता नहीं है। वे बनाने के लिए स्वतंत्र हैं, उपयोग करने के लिए स्वतंत्र हैं, और आमतौर पर हानिरहित हैं। बैश शेल (लिनक्स और मैक पर) में, आप उन्हें एक चर नाम को परिभाषित करके और फिर उसका मान सेट करके सेट कर सकते हैं। निम्न उदाहरण FOO . नामक एक नया चर बनाता है और मान को स्ट्रिंग /home/seth/Documents . पर सेट करता है :
$ declare FOO="/home/seth/Documents"
सफलता एकदम खामोश है, इसलिए हो सकता है कि आपको विश्वास न हो कि आपका चर सेट हो गया है। आप इको कमांड . के साथ अपने लिए परिणाम देख सकते हैं , अपने चर को डॉलर चिह्न ($ .) के साथ जोड़कर याद करते हुए ) यह सुनिश्चित करने के लिए कि वेरिएबल को ठीक उसी तरह पढ़ा गया है जैसा आपने इसे परिभाषित किया है, आप इसे ब्रेसिज़ और कोट्स में भी लपेट सकते हैं। ऐसा करने से वेरिएबल में प्रकट हो सकने वाले किन्हीं विशेष वर्णों को सुरक्षित रखा जाता है; इस उदाहरण में, यह लागू नहीं होता है, लेकिन यह अभी भी एक अच्छी आदत है:
$ echo "${FOO}"
/home/seth/Documents
जो लोग अक्सर शेल का उपयोग करते हैं, उनके लिए चर सेट करना एक सामान्य बात हो सकती है, इसलिए प्रक्रिया कुछ अनौपचारिक हो गई है। जब एक स्ट्रिंग के बाद बराबर चिह्न (= .) आता है ) और एक मान, बैश चुपचाप मान लेता है कि आप एक वैरिएबल सेट कर रहे हैं, जिससे घोषणा कीवर्ड अनावश्यक:
$ FOO="/home/seth/Documents"
चर आमतौर पर एक प्रणाली से दूसरी प्रणाली तक जानकारी पहुंचाने के लिए होते हैं। इस सरल उदाहरण में, आपका चर बहुत उपयोगी नहीं है, लेकिन यह अभी भी जानकारी का संचार कर सकता है। उदाहरण के लिए, क्योंकि FOO . की सामग्री चर एक फ़ाइल पथ है, आप चर का उपयोग ~/दस्तावेज़ . के शॉर्टकट के रूप में कर सकते हैं निर्देशिका:
$ pwd
/home/seth
$ cd "${FOO}"
$ pwd
/home/seth/Documents
चर कोई भी गैर-आरक्षित स्ट्रिंग (पूर्णांक और अंडरस्कोर के साथ) हो सकते हैं। उन्हें पूंजीकृत करने की आवश्यकता नहीं है, लेकिन वे अक्सर ऐसे होते हैं कि वे चर के रूप में आसानी से पहचाने जा सकते हैं।
किसी वेरिएबल को कैसे साफ़ करें
आप किसी वैरिएबल को अनसेट . से साफ़ कर सकते हैं आदेश:
$ unset FOO
$ echo $FOO
व्यवहार में, यह क्रिया आमतौर पर आवश्यक नहीं होती है। चर अपेक्षाकृत "सस्ते" हैं, इसलिए आप उन्हें बना सकते हैं और फिर उन्हें भूल सकते हैं जब आपको उनकी आवश्यकता नहीं होती है। हालांकि, कई बार आप यह सुनिश्चित करना चाहते हैं कि एक चर खाली है, ताकि किसी अन्य प्रक्रिया को गलत जानकारी देने से बचा जा सके जो चर को पढ़ सकती है।
टकराव सुरक्षा के साथ एक नया वेरिएबल बनाएं
कभी-कभी, आपके पास यह मानने का कारण हो सकता है कि एक चर पहले से ही आपके द्वारा या एक प्रक्रिया द्वारा निर्धारित किया गया था। अगर आप इसे ओवरराइड नहीं करना चाहते हैं, तो एक वैरिएबल को उसके मौजूदा मान पर सेट करने के लिए एक विशेष सिंटैक्स होता है, जब तक कि उसका मौजूदा मान खाली न हो।
इस उदाहरण के लिए, मान लें कि FOO /home/seth/Documents . पर सेट है :
$ FOO=${FOO:-"bar"}
$ echo $FOO
/home/seth/Documents
कोलन-डैश :- संकेतन कारण घोषित किसी मौजूदा मान पर डिफ़ॉल्ट करने के लिए। इस प्रक्रिया को दूसरे तरीके से काम करते देखने के लिए, वेरिएबल को साफ़ करें, और पुनः प्रयास करें:
$ unset FOO
$ echo $FOO
$ FOO=${FOO:-"bar"}
$ echo $FOO
bar
चाइल्ड प्रोसेस में वैरिएबल पास करें
जब आप एक वैरिएबल बनाते हैं, तो आप वह बना रहे होते हैं जिसे स्थानीय वैरिएबल . कहा जाता है . इसका मतलब है कि चर आपके वर्तमान शेल और केवल आपके वर्तमान शेल के लिए जाना जाता है।
यह सेटअप एक वैरिएबल के दायरे . की जानबूझकर सीमा है . वेरिएबल, डिज़ाइन द्वारा, जानकारी को जानने की आवश्यकता के आधार पर साझा करने के प्रयास में, केवल स्थानीय रूप से उपलब्ध होने के लिए डिफ़ॉल्ट होते हैं। उदाहरण के लिए, यदि आप स्पष्ट पाठ में एक महत्वपूर्ण पासवर्ड वाला एक चर बनाते हैं, उदाहरण के लिए, यह जानना अच्छा है कि आपका सिस्टम दूरस्थ शेल या दुष्ट डेमॉन (या एक सत्र के बाहर कुछ और जिसने चर बनाया है) को उस पासवर्ड तक पहुंचने की अनुमति नहीं देगा। ।
अपना संकेत बदलने के लिए इस आलेख की शुरुआत से उदाहरण का उपयोग करें, लेकिन फिर अपने वर्तमान शेल में एक नया शेल लॉन्च करें:
$ PS1="% "
% bash
$
जब आप एक नया शेल लॉन्च करते हैं, तो PS1 . का नया मान आपके नए प्रॉम्प्ट के बजाय डिफ़ॉल्ट प्रॉम्प्ट है:एक चाइल्ड प्रोसेस अपने पैरेंट में सेट किए गए वेरिएबल्स को इनहेरिट नहीं करती है। यदि आप चाइल्ड प्रोसेस को खत्म कर देते हैं, तो आप पैरेंट शेल में वापस आ जाते हैं, और आपको अपना कस्टम PS1 . दिखाई देता है फिर से संकेत:
$ exit
%
अगर आप चाइल्ड प्रोसेस में वैरिएबल पास करना चाहते हैं, तो आप प्रीपेन्ड . कर सकते हैं चर परिभाषाओं के साथ एक कमांड, या आप निर्यात . कर सकते हैं चाइल्ड प्रोसेस के लिए वेरिएबल।
वेरिएबल तैयार करना
आप आदेश चलाने से पहले कितनी भी संख्या में चर जोड़ सकते हैं। चाइल्ड प्रोसेस द्वारा वेरिएबल का उपयोग किया जाता है या नहीं, यह प्रक्रिया पर निर्भर करता है, लेकिन आप वेरिएबल को पास कर सकते हैं चाहे कुछ भी हो:
$ FOO=123 bash
$ echo $FOO
123
$
जब आप कुछ पुस्तकालयों (LD_LIBRARY_PATH का उपयोग करके) के लिए एक विशेष स्थान की आवश्यकता वाला एप्लिकेशन चला रहे हों, तो तैयारी करना एक उपयोगी तरकीब हो सकती है वेरिएबल), या जब आप एक गैर-मानक कंपाइलर के साथ सॉफ़्टवेयर संकलित कर रहे हों (CC . का उपयोग करके) चर), और इसी तरह।
निर्यात चर
चाइल्ड प्रोसेस के लिए वैरिएबल उपलब्ध कराने का दूसरा तरीका है निर्यात कीवर्ड, बैश में निर्मित एक कमांड। निर्यात कमांड आपके द्वारा निर्दिष्ट किसी भी चर या चर के दायरे को विस्तृत करता है:
$ PS1="% "
$ FOO=123
$ export PS1
$ export FOO
% bash
% echo $PS1
%
% echo $FOO
123
दोनों ही मामलों में, यह केवल एक चाइल्ड शेल नहीं है जिसकी स्थानीय चर तक पहुंच है जो इसे पास या निर्यात किया गया है, यह उस शेल की कोई भी चाइल्ड प्रोसेस है। आप एक ही शेल से एक एप्लिकेशन लॉन्च कर सकते हैं, और वह वैरिएबल एप्लिकेशन के भीतर से एक पर्यावरण चर के रूप में उपलब्ध है।
आपके सिस्टम पर उपयोग की जाने वाली हर चीज़ के लिए निर्यात किए जाने वाले चर पर्यावरण चर . कहलाते हैं , जो भविष्य के लेख के लिए एक विषय है। इस बीच, रोज़मर्रा के कार्यों के लिए कुछ चरों का उपयोग करके देखें कि वे आपके वर्कफ़्लो में क्या लाते हैं।