Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

बैश वेरिएबल में महारत: घोषणा, असाइनमेंट और प्रभावी उपयोग

कंप्यूटर साइंस (और कैज़ुअल कंप्यूटिंग) में, एक वेरिएबल मेमोरी में एक स्थान है जो बाद में उपयोग के लिए मनमाना जानकारी रखता है। दूसरे शब्दों में, यह आपके लिए डेटा डालने और निकालने के लिए एक अस्थायी स्टोरेज कंटेनर है। बैश शेल में, वह डेटा एक शब्द (कंप्यूटर भाषा में एक स्ट्रिंग) या एक संख्या (एक इंटीजर) हो सकता है।

आपने अपने कंप्यूटर पर कभी (जानबूझकर) वेरिएबल का उपयोग नहीं किया होगा, लेकिन आपने शायद अपने जीवन के अन्य क्षेत्रों में वेरिएबल का उपयोग किया है। जब आप "मुझे वह दो" या "इसे देखो" जैसी बातें कहते हैं, तो आप व्याकरणिक वेरिएबल का उपयोग कर रहे हैं (आप उन्हें सर्वनाम मानते हैं), क्योंकि "इस" और "वह" का अर्थ इस बात पर निर्भर करता है कि आप अपने दिमाग में क्या चित्रित कर रहे हैं, या आप अपने दर्शकों को यह बताने के लिए क्या इंगित कर रहे हैं कि आप किस चीज का उल्लेख कर रहे हैं। जब आप गणित करते हैं, तो आप अज्ञात मूल्य के लिए खड़े होने के लिए वेरिएबल का उपयोग करते हैं, भले ही आप शायद इसे वेरिएबल न कहें।

यहां एक त्वरित और आसान प्रदर्शन है एक बैश वेरिएबल का जिसे आप शायद नहीं जानते कि आप हर दिन उपयोग करते हैं। PS1 वेरिएबल इस बारे में जानकारी रखता है कि आप अपने टर्मिनल प्रॉम्प्ट को कैसे दिखाना चाहते हैं। उदाहरण के लिए, आप इसे कुछ बहुत सरल पर सेट कर सकते हैं—जैसे एक प्रतिशत चिह्न (%)—PS1 वेरिएबल को पुनः परिभाषित करके:

$ PS1="% "
%

यह लेख लिनक्स, BSD, Mac, या Cygwin पर चल रहे बैश शेल में वेरिएबल को संबोधित करता है। Microsoft के ओपन सोर्स PowerShell के उपयोगकर्ताओं को PowerShell में वेरिएबल के बारे में मेरे लेख का संदर्भ लेना चाहिए।

वेरिएबल किस लिए हैं?

क्या आपको बैश में वेरिएबल की आवश्यकता है यह इस बात पर निर्भर करता है कि आप टर्मिनल में क्या करते हैं। कुछ उपयोगकर्ताओं के लिए, वेरिएबल डेटा प्रबंधित करने का एक अनिवार्य साधन हैं, जबकि अन्य के लिए वे मामूली और अस्थायी सुविधाएं हैं, और फिर भी अन्य के लिए, वे अस्तित्वहीन भी हो सकते हैं।

अंततः, वेरिएबल एक उपकरण हैं। आप उनका उपयोग तब कर सकते हैं जब आपको उनका उपयोग मिले, या उन्हें इस सुकून में छोड़ दें कि वे आपके OS द्वारा प्रबंधित हैं। हालांकि, ज्ञान शक्ति है, और यह समझना कि बैश में वेरिएबल कैसे काम करते हैं, आपको सभी प्रकार की अप्रत्याशित रचनात्मक समस्या-समाधान की ओर ले जा सकता है।

वेरिएबल कैसे सेट करें

वेरिएबल बनाने के लिए आपको विशेष अनुमति की आवश्यकता नहीं है। वे बनाने के लिए मुफ्त हैं, उपयोग करने के लिए मुफ्त हैं, और आमतौर पर हानिरहित हैं। बैश शेल (लिनक्स और मैक पर) में, आप उन्हें एक वेरिएबल नाम परिभाषित करके और फिर उसका मान सेट करके सेट कर सकते हैं। निम्नलिखित उदाहरण FOO नामक एक नया वेरिएबल बनाता है और मान को स्ट्रिंग /home/seth/Documents पर सेट करता है:

$ declare FOO="/home/seth/Documents"

सफलता भयानक रूप से चुप है, इसलिए आप आश्वस्त महसूस नहीं कर सकते कि आपका वेरिएबल सेट हो गया। आप echo कमांड के साथ स्वयं परिणाम देख सकते हैं, अपने वेरिएबल को डॉलर चिह्न ($) से पूर्व करके याद करके। यह सुनिश्चित करने के लिए कि वेरिएबल को ठीक वैसे ही पढ़ा जाता है जैसे आपने इसे परिभाषित किया था, आप इसे ब्रेसिज़ और कोट्स में भी लपेट सकते हैं। ऐसा करने से वेरिएबल में दिखाई दे सकने वाले किसी भी विशेष वर्ण को संरक्षित किया जाता है; इस उदाहरण में, यह लागू नहीं होता, लेकिन यह अभी भी एक अच्छी आदत है:

$ echo "${FOO}"
/home/seth/Documents

वेरिएबल सेट करना उन लोगों के लिए एक सामान्य चीज हो सकती है जो अक्सर शेल का उपयोग करते हैं, इसलिए प्रक्रिया कुछ हद तक अनौपचारिक हो गई है। जब एक स्ट्रिंग के बाद एक इक्वल साइन (=) और एक मान होता है, तो बैश चुपचाप मान लेता है कि आप एक वेरिएबल सेट कर रहे हैं, जिससे declare कीवर्ड अनावश्यक हो जाता है:

$ FOO="/home/seth/Documents"

वेरिएबल आमतौर पर एक सिस्टम से दूसरे सिस्टम में जानकारी पहुंचाने के लिए होते हैं। इस सरल उदाहरण में, आपका वेरिएबल बहुत उपयोगी नहीं है, लेकिन यह अभी भी जानकारी संप्रेषित कर सकता है। उदाहरण के लिए, चूंकि FOO वेरिएबल की सामग्री एक फाइल पाथ है, आप ~/Documents डायरेक्टरी के शॉर्टकट के रूप में वेरिएबल का उपयोग कर सकते हैं:

$ pwd
/home/seth
$ cd "${FOO}"
$ pwd
/home/seth/Documents

वेरिएबल कोई भी नॉन-रिजर्व्ड स्ट्रिंग (इंटीजर और अंडरस्कोर के साथ) हो सकते हैं। उन्हें कैपिटलाइज़ करने की आवश्यकता नहीं है, लेकिन वे अक्सर होते हैं ताकि उन्हें वेरिएबल के रूप में पहचानना आसान हो।

वेरिएबल कैसे क्लियर करें

आप unset कमांड के साथ एक वेरिएबल को क्लियर कर सकते हैं:

$ unset FOO
$ echo $FOO

व्यवहार में, यह कार्रवाई आमतौर पर आवश्यक नहीं है। वेरिएबल अपेक्षाकृत "सस्ते" हैं, इसलिए आप उन्हें बना सकते हैं और फिर जब आपको उनकी आवश्यकता न हो तो उन्हें भूल सकते हैं। हालांकि, ऐसे समय हो सकते हैं जब आप यह सुनिश्चित करना चाहें कि एक वेरिएबल खाली है ताकि किसी अन्य प्रक्रिया को गलत जानकारी देने से बचा जा सके जो वेरिएबल को पढ़ सकती है।

टकराव सुरक्षा के साथ नया वेरिएबल बनाएं

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

इस उदाहरण के लिए, मान लें कि FOO /home/seth/Documents पर सेट है:

$ FOO=${FOO:-"bar"}
$ echo $FOO
/home/seth/Documents

कोलन-डैश :- नोटेशन declare को मौजूदा मान पर डिफ़ॉल्ट करने का कारण बनता है। इसे दूसरी तरह से काम करते देखने के लिए, वेरिएबल को क्लियर करें, और फिर से प्रयास करें:

$ 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 वेरिएबल का उपयोग करके) के साथ सॉफ़्टवेयर कंपाइल कर रहे हों, और इसी तरह।

वेरिएबल एक्सपोर्ट करना

किसी वेरिएबल को चाइल्ड प्रोसेस के लिए उपलब्ध कराने का दूसरा तरीका export कीवर्ड है, जो बैश में बना एक कमांड है। export कमांड आपके द्वारा निर्दिष्ट किसी भी वेरिएबल या वेरिएबल के स्कोप को विस्तृत करता है:

$ PS1="% "
$ FOO=123
$ export PS1
$ export FOO
% bash
% echo $PS1
%
% echo $FOO
123

दोनों मामलों में, यह सिर्फ एक चाइल्ड शेल नहीं है जिसकी पहुंच एक लोकल वेरिएबल तक है जिसे पास किया गया है या एक्सपोर्ट किया गया है, यह उस शेल का कोई भी चाइल्ड प्रोसेस है। आप उसी शेल से एक एप्लिकेशन लॉन्च कर सकते हैं, और वह वेरिएबल एप्लिकेशन के भीतर से एनवायरनमेंट वेरिएबल के रूप में उपलब्ध होगा।

आपके सिस्टम पर हर चीज के उपयोग के लिए एक्सपोर्ट किए गए वेरिएबल को एनवायरनमेंट वेरिएबल कहा जाता है, जो भविष्य के लेख का विषय है। इस बीच, रोजमर्रा के कार्यों के लिए कुछ वेरिएबल का उपयोग करने का प्रयास करें ताकि आप देख सकें कि वे आपके वर्कफ्लो में क्या लाते हैं।

  1. लिनक्स में नेस्टेड वेरिएबल सब्स्टीट्यूशन और बिल्ट-इन BASH वेरिएबल्स में महारत - अंतिम गाइड लिनक्स में नेस्टेड वेरिएबल सब्स्टीट्यूशन और बिल्ट-इन BASH वेरिएबल्स में महारत - अंतिम गाइड

    BASH शेल पर पिछले दो लेख, जहां हमने वेरिएबल्स पर विस्तार से चर्चा की थी, हमारे पाठकों द्वारा अत्यधिक सराहे गए। Tecmint-Team के रूप में हम आपको नवीनतम, अप-टू-डेट और प्रासंगिक विषयों को विस्तार से प्रदान करने के लिए बहुत उत्सुक हैं। इसके अलावा हम हमेशा संबंधित विषयों के प्रमुख दृष्टिकोणों को छूने का प

  1. - बैश ट्रैप में महारत हासिल करें: स्क्रिप्ट समाप्ति को ग्रेसफुली संभालें

    यह पता लगाना आसान है कि शेल स्क्रिप्ट कब शुरू होती है, लेकिन यह जानना हमेशा आसान नहीं होता कि यह कब रुकती है। एक स्क्रिप्ट सामान्य रूप से समाप्त हो सकती है, जैसा कि उसका लेखक चाहता है, लेकिन यह अप्रत्याशित घातक त्रुटि के कारण भी विफल हो सकती है। कभी-कभी स्क्रिप्ट विफल होने पर जो भी प्रगति पर था उसके

  1. Bash वेरिएबल्स में मास्टर करें: ग्लोबल और लोकल उपयोग के 6 व्यावहारिक उदाहरण Bash वेरिएबल्स में मास्टर करें: ग्लोबल और लोकल उपयोग के 6 व्यावहारिक उदाहरण

    यह लेख हमारी चल रही bash ट्यूटोरियल सीरीज़ का हिस्सा है। किसी भी अन्य प्रोग्रामिंग भाषा की तरह, Bash भी वेरिएबल्स प्रदान करता है। Bash वेरिएबल्स प्रोग्राम के जीवनकाल के दौरान आवश्यक जानकारी के लिए अस्थायी भंडारण प्रदान करते हैं। सिंटैक्स: VARNAME=VALUE नोट: वेरिएबल असाइनमेंट में = चिन्ह के आसपास कोई