बीच क्या अंतर है set
, env
, declare
और export
जब इस तरह के रूप में एक लिनक्स खोल में एक चर की स्थापना, bash
?
बीच क्या अंतर है set
, env
, declare
और export
जब इस तरह के रूप में एक लिनक्स खोल में एक चर की स्थापना, bash
?
जवाबों:
ऐसा लगता है कि सेट और डिक्लेयर थोड़ा अलग है, सेट अधिक शक्तिशाली होने के साथ।
Https://www.gnu.org/software/bash/manual/bash.html#Bash-Biltins के तहत "घोषणा" देखें : "चर घोषित करें और उन्हें विशेषताएँ दें। यदि कोई नाम नहीं दिया गया है, तो चर के मान प्रदर्शित करें। बजाय।
Https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * सेट के तहत "सेट" सेट करें: "यह बिलिन इतना जटिल है कि यह अपने स्वयं के अनुभाग के योग्य है। सेट आपको अनुमति देता है। शेल विकल्पों के मूल्यों को बदलें और स्थिति मापदंडों को सेट करें, या शेल चर के नाम और मूल्यों को प्रदर्शित करें। "
ENV बैश में एक पर्यावरण चर है: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env एक लिनक्स कमांड है। मुझे लगता है कि यह एक अच्छा संदर्भ है: /unix/103467/what-is-env-command-doing
मुझे लगा कि यह निर्यात की अच्छी व्याख्या है: http://www.unix.com/302531838-post2.html
इसके अलावा: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * निर्यात (बॉर्न से): "पर्यावरण में बाल प्रक्रियाओं को पारित करने के लिए प्रत्येक नाम को चिह्नित करें।"
उपरोक्त URL से उधार कोड:
root@linux ~# x=5 <= here variable is set without export command
root@linux ~# echo $x
5
root@linux ~# bash <= subshell creation
root@linux ~# echo $x <= subshell doesnt know $x variable value
root@linux ~# exit <= exit from subshell
exit
root@linux ~# echo $x <= parent shell still knows $x variable
5
root@linux ~# export x=5 <= specify $x variable value using export command
root@linux ~# echo $x <= parent shell doesn't see any difference from the first declaration
5
root@linux ~# bash <= create subshell again
root@linux ~# echo $x <= now the subshell knows $x variable value
5
root@linux ~#
declare
और set
और env
? निर्यात बनाम घोषणा
सबसे पहले, आपको लगता है कि समझना चाहिए environment variables
और shell variables
एक ही बात नहीं कर रहे हैं।
फिर, आपको पता होना चाहिए कि गोले में ऐसी विशेषताएं हैं जो यह बताती हैं कि यह कैसे काम करता है। ये विशेषताएँ पर्यावरण नहीं हैं और न ही शेल चर हैं।
अब, आपके प्रश्न का उत्तर देने पर।
env
: बिना किसी विकल्प के, अपने मूल्यों के साथ वर्तमान पर्यावरण चर दिखाता है ; हालांकि -i
ध्वज के साथ एक एकल कमांड के लिए पर्यावरण चर सेट करने के लिए उपयोग किया जा सकता हैset
: विकल्पों के बिना, प्रत्येक शेल चर का नाम और मूल्य प्रदर्शित किया जाता है * ~ man set
आरएचएल में चलने से ; शेल विशेषता सेट करने के लिए भी उपयोग किया जा सकता है । यह आदेश पर्यावरण और शेल चर को सेट नहीं करता है ।declare
: बिना किसी विकल्प के, जैसा कि env
; शेल चर सेट करने के लिए भी इस्तेमाल किया जा सकता हैexport
: शेल वैरिएबल को पर्यावरण वैरिएबल बनाता हैसंक्षेप में:
set
शेल और न ही पर्यावरण चर सेट नहीं करता हैenv
एक आदेश के लिए पर्यावरण चर सेट कर सकते हैंdeclare
शेल चर सेट करता हैexport
शेल वैरिएबल पर्यावरण वैरिएबल बनाता हैनोट
declare -x VAR=VAL
शेल चर बनाता है और इसे निर्यात भी करता है, जिससे यह पर्यावरण चर बन जाता है।
declare -g
एक वैश्विक परिवर्तनशील होगा, क्या यह पर्यावरण का हिस्सा होगा?