जब आप निष्पादित करते हैं set -a var=99
, तो तीन अलग-अलग चीजें होती हैं (आपके प्रश्न से संबंधित):
- Vars निर्यात करने के लिए एक सेट विकल्प (
-a
) (कर के विपरीत set +a
)।
- स्थितिगत पैरामीटर विकल्प (
$1
सेट टू var=99
) का अनुसरण करने के लिए "सेट" हैं ।
- शेल चर अंडरस्कोर
$_
अंतिम पैरामीटर (विस्तारित) पर सेट है।
सेट-ए
सभी बाद के (नए या परिवर्तित) चर के निर्यात के रूप में (सभी गोले में, छोड़कर और कुछ संबंधित गोले) set -a
निशान का निष्पादन ।csh
$ set -a
$ myvariable=wer
$ env | grep myvariable
myvariable=wer
इस सेटिंग से पुनर्प्राप्त करने के लिए, बस -
एक में बदलें +
:
$ set +a
$ unset myvariable # to erase it from the environment if it
# was exported before the change of set +a
$ myvariable=456544654 # A new value of the variable.
$ env | grep "variable" # No output means the var does not exist
# in the current environment
सेट var = 99
जो वास्तव set -- var=99
में एक विकल्प की व्याख्या से बचने के लिए होना चाहिए (और सेट में बहुत कुछ है) मानों के साथ जो एक डैश के साथ शुरू होता है (-
) से ।
तर्कों की सूची (स्थितीय मापदंडों की सूची) को उसके बाद सेट करता है --
। यह सभी उचित गोले में मान्य है (csh et al में नहीं)। स्थिति संबंधी तर्क "$ @" (या समान "$ *", समान नहीं) के साथ मुद्रित होते हैं।
$ set -- a=1 b=2 c=3
$ echo "$@"
a=1 b=2 c=3
_ = Last_argument
और, आंतरिक शेल चर का मान _
निष्पादित लाइन के अंतिम तर्क में बदल जाता है। यह लगभग सभी गोले (jsh, राख, यश, डैश, lksh, mksh, ksh93, attsh और बेशक csh और tcsh) के अलावा बाश के लिए सच नहीं है।
$ echo one two last argument
one two last argument
$ echo "$_"
argument
$ echo This is a new: last_argument
This is a new: last_argument
$ echo "$_"
last_argument
कृपया ध्यान दें कि $_
विस्तार के बाद मूल्य है:
$ a="A New_Argument"
$ echo Something else to test: "$a"
Something else to test: A New_Argument
$ echo "$_"
A New_Argument
इसलिए जब आप निष्पादित करते हैं:
$ set -a myvar=99; set | grep 'myvar'
_=myvar=99
आपको शेल चर '$ _' का विवरण मिलता है। यह भी काम करता है:
$ set -a myvar=99; declare -p _
declare -- _="myvar=99"