लिनक्स शेल में एक चर सेट करते समय सेट, एनवी, घोषित और निर्यात के बीच क्या अंतर है?


17

बीच क्या अंतर है set, env, declareऔर exportजब इस तरह के रूप में एक लिनक्स खोल में एक चर की स्थापना, bash?


1
इस सवाल को क्यों वोट दिया गया?
l0b0

जवाबों:


5

ऐसा लगता है कि सेट और डिक्लेयर थोड़ा अलग है, सेट अधिक शक्तिशाली होने के साथ।

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? निर्यात बनाम घोषणा
पचेरियर

मैं इसे नीचा दिखाने के लिए गया क्योंकि यह केवल सवाल का जवाब नहीं दे रहा है।
डैनियल सी। सोबरल

मुझे बताएं कि क्या यह कोई बेहतर है।
शॉन पी।

2

सबसे पहले, आपको लगता है कि समझना चाहिए environment variablesऔर shell variablesएक ही बात नहीं कर रहे हैं।

फिर, आपको पता होना चाहिए कि गोले में ऐसी विशेषताएं हैं जो यह बताती हैं कि यह कैसे काम करता है। ये विशेषताएँ पर्यावरण नहीं हैं और न ही शेल चर हैं।

अब, आपके प्रश्न का उत्तर देने पर।

  1. env: बिना किसी विकल्प के, अपने मूल्यों के साथ वर्तमान पर्यावरण चर दिखाता है ; हालांकि -iध्वज के साथ एक एकल कमांड के लिए पर्यावरण चर सेट करने के लिए उपयोग किया जा सकता है
  2. set: विकल्पों के बिना, प्रत्येक शेल चर का नाम और मूल्य प्रदर्शित किया जाता है * ~ man setआरएचएल में चलने से ; शेल विशेषता सेट करने के लिए भी उपयोग किया जा सकता है । यह आदेश पर्यावरण और शेल चर को सेट नहीं करता है
  3. declare: बिना किसी विकल्प के, जैसा कि env; शेल चर सेट करने के लिए भी इस्तेमाल किया जा सकता है
  4. export: शेल वैरिएबल को पर्यावरण वैरिएबल बनाता है

संक्षेप में:

  1. set शेल और न ही पर्यावरण चर सेट नहीं करता है
  2. env एक आदेश के लिए पर्यावरण चर सेट कर सकते हैं
  3. declare शेल चर सेट करता है
  4. export शेल वैरिएबल पर्यावरण वैरिएबल बनाता है

नोट declare -x VAR=VAL शेल चर बनाता है और इसे निर्यात भी करता है, जिससे यह पर्यावरण चर बन जाता है।


इसके बारे में क्या declare -gएक वैश्विक परिवर्तनशील होगा, क्या यह पर्यावरण का हिस्सा होगा?
श्री रोलैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.