आप मूल रूप से इसका उपयोग कभी भी कर सकते हैं, जिसे आप "इंजेक्ट" करना चाहते हैं पर्यावरण चर एक शेल स्क्रिप्ट (तर्क के रूप में) में पारित किए गए हैं जैसे कि वे पर्यावरण के भीतर सेट किए गए थे export
, लेकिन बिना उन्हें स्थायी रूप export
से कमांड चलाने से पहले सूची में रहते हैं ।
नोट: वहाँ भी की लंबी रूप है -k
, स्विच set -o keyword
।
उदाहरण
$ cat cmd1.bash
#!/bin/bash
echo $VARCMD
अब अगर मैं set -k
:
$ set -k; ./cmd1.bash VARCMD="hi"; set +k
hi
लेकिन अगर मैं सिर्फ उपरोक्त स्क्रिप्ट चलाने के लिए था:
$ ./cmd1.bash
$
निर्यात क्या कर रहा है?
$ help export
...
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
...
तो अगर हम export | grep VAR
अपनी स्क्रिप्ट में जोड़ना चाहते थे तो:
$ cat cmd2.bash
#!/bin/bash
echo $VARCMD
export | grep VAR
और हमने अपने उपरोक्त परीक्षणों को फिर से चलाया:
$ set -k; ./cmd2.bash VARCMD="hi"; set +k
hi
declare -x VARCMD="hi"
लेकिन बिना set -k
:
$ ./cmd2.bash
$
तो set -k
हमें बड़े पैमाने पर अस्थायी रूप से निर्यात करने की अनुमति है।
एक और उदाहरण
$ cat cmd3.bash
#!/bin/bash
echo $VARCMD1
echo $VARCMD2
export | grep VAR
जब हम कई चर सेट करते हैं तो वे सभी निर्यात होते हैं:
$ set -k; ./cmd3.bash VARCMD1="hi" VARCMD2="bye"; set +k
hi
bye
declare -x VARCMD1="hi"
declare -x VARCMD2="bye"
तो फिर यह सिर्फ सभी पर्यावरण चर इंजेक्शन है?
नहीं -k
बहुत स्पष्ट बात कर रहा है। यह केवल निर्यात चर है जो कमांड लाइन पर शामिल थे जब एक कमांड निष्पादित किया गया था।
उदाहरण
कहो मैं इस चर सेट:
$ VARCMD1="hi"
अब जब हम एक ही कमांड को छोड़ते हैं VARCMD1="hi"
:
$ set -k; ./cmd3.bash VARCMD2="bye"; set +k
bye
declare -x VARCMD2="bye"
लेकिन यह क्यों मौजूद है?
मुझे यह स्रोत मिला, जो इस विशेषता के बारे में थोड़ा समझाता है, जिसका शीर्षक है: "कीवर्ड पैरामीटर असाइनमेंट स्ट्रिंग्स"। नोट: स्रोत URL एक IP पते का उपयोग करता है इसलिए मैं इसे SE पर सीधे यहां लिंक नहीं कर सकता।
http://140.120.7.21/OpenSystem2/SoftwareTools/node16.html
जब किसी भी भाषा में प्रोग्रामिंग की जाती है, तो विश्वसनीय कोड लिखने के लिए चर और उसका मूल्य गुजरना महत्वपूर्ण होता है। पूर्णांक और सरणी चर प्रकार के अलावा, अन्य सभी शेल चर स्ट्रिंग को उनके मान के रूप में स्वीकार करते हैं। शेल प्रोग्रामिंग भाषा के बारे में बात करते समय, सुसंगत होने के लिए, हम "कीवर्ड पैरामीटर" वाक्यांश को पसंद करते हैं। कीवर्ड पैरामीटर में मान निर्दिष्ट करते समय यह देखने के लिए कुछ बिंदु दिए गए हैं:
किसी भी अप्रत्याशित प्रभाव से बचने के लिए, कमांड स्ट्रिंग के सामने हमेशा पैरामीटर असाइनमेंट रखें।
बी शेल में, कीवर्ड मापदंडों के निर्दिष्ट मूल्यों को (स्थानीय) शेल चर में संग्रहीत किया जाएगा। Bash और ksh में, कीवर्ड पैरामीटर असाइनमेंट स्ट्रिंग्स पूर्ववर्ती कमांड शेल वेरिएबल्स में संग्रहीत नहीं किया जाएगा। वे केवल वर्तमान कमांड को निष्पादित करने के लिए कांटेक्ट किए गए तत्काल उपप्रकार को प्रभावित करते हैं। कीवर्ड पैरामीटर असाइनमेंट स्ट्रिंग्स की एक पंक्ति अकेले (स्थानीय) शेल चर में संग्रहीत होती है। कीवर्ड पैरामीटर असाइनमेंट स्ट्रिंग्स भी उर्फ, डिक्लेयर, टाइपसेट, एक्सपोर्ट, आसानी से और स्थानीय बिलिन कमांड्स के तर्क के रूप में प्रकट हो सकते हैं। [बैश संदर्भ मैनुअल की धारा 3.4]
कीवर्ड पैरामीटर असाइनमेंट स्ट्रिंग्स को कमांड के निष्पादन के लिए तर्क के रूप में माना जाएगा, यदि उन्हें कमांड नाम के बाद रखा गया है।
- कीवर्ड पैरामीटर को सेट कमांड द्वारा हेरफेर किया जा सकता है।
-k
हमें उन्हें रिफैक्ट करने की आवश्यकता के बिना 30 साल पुरानी शेल स्क्रिप्ट चलाने की अनुमति देता है। इसके बजाय उपसर्ग सिंटैक्स का उपयोग करके अस्थायी पर्यावरण चर पास करें:var1=x var2=y command ...