BASH शेल पर पिछले दो लेख, जहां हमने वेरिएबल्स पर विस्तार से चर्चा की थी, हमारे पाठकों द्वारा अत्यधिक सराहे गए। Tecmint-Team के रूप में हम आपको नवीनतम, अप-टू-डेट और प्रासंगिक विषयों को विस्तार से प्रदान करने के लिए बहुत उत्सुक हैं। इसके अलावा हम हमेशा संबंधित विषयों के प्रमुख दृष्टिकोणों को छूने का प्रयास करते हैं।
यह लिनक्स वेरिएबल्स पर अंतिम लेख है जहां हम इस विषय को समाप्त करने से पहले वेरिएबल सब्स्टीट्यूशन और शेल में परिभाषित वेरिएबल्स को देखने जा रहे हैं।
BASH कमांड के वास्तव में निष्पादित होने से पहले वेरिएबल सब्स्टीट्यूशन करता है। लिनक्स BASH शेल कमांड निष्पादित करने से पहले सभी '$' चिह्नों को खोजता है और उन्हें वेरिएबल के मान से बदल देता है। BASH वेरिएबल सब्स्टीट्यूशन की प्रक्रिया केवल एक बार की जाती है। लेकिन क्या होगा अगर हमारे पास नेस्टेड वेरिएबल्स हों?
नोट: नेस्टेड वेरिएबल से हमारा मतलब है, वेरिएबल के अंदर घोषित वेरिएबल। आइए नीचे दिए गए उदाहरण में उपरोक्त परिदृश्य को देखें।
एक वेरिएबल घोषित करें जो रीड-ओनली और एक्जीक्यूटेबल हो।
admin@wsxdn.com:~$ declare -rx Linux_best_website="www.tecmint.com"
संग्रहीत वेरिएबल के मान की जांच करें।
admin@wsxdn.com:~$ printf "%s" "$Linux_best_website" www.tecmint.com
अब एक और वेरिएबल घोषित करें जो फिर से रीड-ओनली और एक्जीक्यूटेबल हो।
admin@wsxdn.com:~$ declare -rx Linux_website="Linux_best_website"
अब स्थिति यह है, हमने दो वेरिएबल्स परिभाषित किए हैं।
'Linux_best_website', जिसका मान "www.tecmint.com" है
और, 'Linux_website', जिसका मान "Linux_best_website" है
अगर हम नीचे दी गई वन-लाइन कमांड चलाते हैं तो परिणाम क्या होगा?
admin@wsxdn.com:~$ printf "%s" "$Linux_website"
इसे पहले वेरिएबल '$Linux_website' को मान "Linux_best_website" से बदलना चाहिए और फिर "$Linux_best_website" फिर से एक वेरिएबल है जिसका मान "www.tecmint.com" है। इसलिए नीचे दी गई कमांड चलाने का अंतिम आउटपुट होना चाहिए।
admin@wsxdn.com:~$ printf "%s" "$Linux_website" www.tecmint.com
लेकिन दुर्भाग्य से, ऐसा नहीं है, हमें जो आउटपुट मिल रहा है वह है Linux_best_website।
कारण? हां! BASH वेरिएबल के मान को केवल एक बार प्रतिस्थापित करता है। जटिल स्क्रिप्ट और प्रोग्राम के बारे में क्या जहां हमें वेरिएबल्स को बार-बार प्रतिस्थापित करने की आवश्यकता होती है साथ ही वेरिएबल को एक से अधिक बार प्रतिस्थापित करने की आवश्यकता होती है?
यहां कमांड 'eval' आती है जो स्क्रिप्ट में एक से अधिक बार वेरिएबल सब्स्टीट्यूशन का अतिरिक्त कार्य करती है। पूरी कार्यप्रणाली को स्पष्ट करने के लिए यहां एक उदाहरण है।
एक वेरिएबल x घोषित करें, जिसका मान 10 है।
admin@wsxdn.com:~/Desktop$ declare x=10
हमने अभी-अभी परिभाषित वेरिएबल x के मान की जांच करें।
admin@wsxdn.com:~/Desktop$ echo $yx x10
एक वेरिएबल y घोषित करें, जिसका मान x है।
admin@wsxdn.com:~/Desktop$ declare y=x
हमने अभी-अभी परिभाषित वेरिएबल y के मान की जांच करें।
admin@wsxdn.com:~/Desktop$ echo $y x
यहां BASH के वन-टाइम वेरिएबल सब्स्टीट्यूशन की समस्या है, जो वेरिएबल सब्स्टीट्यूशन का एक अतिरिक्त राउंड नहीं करता है। हम इसे ठीक करने के लिए 'eval' कमांड का उपयोग कर रहे हैं।
admin@wsxdn.com:~/Desktop$ eval y=$x
अब वेरिएबल 'y' के मान की जांच करें।
admin@wsxdn.com:~/Desktop$ echo $y 10
हुर्रे! समस्या ठीक हो गई और 'eval' कमांड ने बाजी मार ली :)
उल्लेख करने की आवश्यकता नहीं, 'eval' कमांड बड़े स्क्रिप्ट प्रोग्राम में बहुत सहायक है और एक बहुत ही उपयोगी उपकरण है।
इस पोस्ट का अंतिम लेकिन महत्वपूर्ण हिस्सा BASH पूर्वनिर्धारित वेरिएबल्स हैं। नहीं! इस सूची को देखकर घबराएं नहीं। आपको स्क्रिप्ट लिखना शुरू करने से पहले कुछ को छोड़कर पूरी सूची याद रखने की कभी आवश्यकता नहीं होती। सीखने की प्रक्रिया के हिस्से के रूप में, हम BASH पूर्वनिर्धारित वेरिएबल सूची प्रस्तुत कर रहे हैं।
| क्र.सं. | BASH वेरिएबल | परिणाम |
|---|---|---|
| 1 | auto_resume | रुके हुए जॉब्स के लिए प्रोसेस कमांड पूरा करना। |
| 2 | BASH | शेल का PATH। |
| 3 | BASH_ENV | प्रोफाइल फाइल का नाम दिखाता है। |
| 4 | BASH_VERSION | Bash का संस्करण दिखाता है। |
| 5 | BASH_VERSINFO | विस्तृत संस्करण जानकारी दिखाता है। |
| 6 | BASH_VERSINFO[0] | मुख्य संस्करण संख्या (रिलीज)। |
| 7 | BASH_VERSINFO[1] | माइनर संस्करण संख्या (संस्करण)। |
| 8 | BASH_VERSINFO[2] | पैच स्तर। |
| 9 | BASH_VERSINFO[3] | बिल्ड संस्करण। |
| 10 | BASH_VERSINFO[4] | रिलीज स्थिति (उदाहरण के लिए, beta1)। |
| 11 | BASH_VERSINFO[5] | MACHTYPE का मान। |
| 12 | CDPATH | कॉलन से अलग की गई निर्देशिकाओं की सूची। |
| 13 | COLUMNS | स्टैंडर्ड आउटपुट पर प्रति लाइन वर्णों की संख्या। |
| 14 | EUID | वर्तमान उपयोगकर्ता की यूजर आईडी। |
| 15 | FCEDIT | fc कमांड के लिए डिफ़ॉल्ट टेक्स्ट एडिटर। |
| 16 | FUNCNAME | फंक्शन का नाम |
| 17 | GROUPS | ग्रुप जिनका उपयोगकर्ता सदस्य है। |
| 18 | HISTFILE | कमांड हिस्ट्री वाली फाइल। |
| 19 | HOME | आपके होम डायरेक्टरी का नाम। |
| 20 | LINES | स्टैंडर्ड आउटपुट पर क्षैतिज लाइनों की संख्या। |
| 21 | आने वाले मेल की जांच के लिए फाइल का नाम। | |
| 22 | OSTYPE | ऑपरेटिंग सिस्टम का नाम। |
| 23 | OLDPWD | पिछली वर्किंग डायरेक्टरी। |
| 24 | PWD | वर्तमान वर्किंग डायरेक्टरी। |
| 25 | RANDOM | एक यादृच्छिक संख्या प्रिंट करता है। |
| 26 | SHELL | उपयोग करने के लिए पसंदीदा शेल। |
| 27 | TIMEFORMAT | time कमांड का प्रारूप। |
| 28 | UID | वर्तमान उपयोगकर्ता की आईडी। |
पूर्वनिर्धारित BASH वेरिएबल्स की एक विशाल सूची है। हमने सबसे अधिक उपयोग किए जाने वाले की एक सूची बनाने का प्रयास किया है।
अभी के लिए बस इतना ही। मैं एक और दिलचस्प लेख के साथ फिर से यहाँ आऊंगा। तब तक TecMint से जुड़े रहें। नीचे कमेंट सेक्शन में हमें अपना बहुमूल्य फीडबैक देना न भूलें।