मैं एक शेल स्क्रिप्ट लिख रहा हूं, जहां मुझे यह जांचना है कि क्या पर्यावरण परिवर्तनीय सेट है, अगर सेट नहीं है तो मुझे इसे सेट करना होगा। क्या शैल स्क्रिप्ट में जांच करने का कोई तरीका है, चाहे पर्यावरण चर पहले से सेट हो या नहीं?जांचें कि क्या पर्यावरण चर पहले से सेट है
उत्तर
[ -z "$VARIABLE" ] && VARIABLE="abc"
if env | grep -q ^VARIABLE=
then
echo env variable is already exported
else
echo env variable was not exported, but now it is
export VARIABLE
fi
मैं जोर देना कि [ -z $VARIABLE ]
पर्याप्त नहीं है, क्योंकि आप VARIABLE
हो सकता है चाहते हैं, लेकिन यह निर्यात नहीं किया गया था। इसका मतलब है कि यह एक पर्यावरण चर नहीं है।
क्या यह सभी शैल पर्यावरण में काम करेगा? – Mojoy
@ सेंथिलनाथन: हां, ज़ाहिर है, केवल एक चीज जिसे इस मोर कोड को अधिक पोर्टेबल बनाने के लिए फिर से लिखा जा सकता है, वह 'grep -q' है। कोई 'एनवी | लिख सकता है grep^VARIABLE =>/dev/null' इसके बजाए। –
यदि मैं एक चर निर्यात करता हूं, तो इसे निर्यात किए बिना वैरिएबल को किसी अन्य चीज़ पर सेट करें, क्या मैं अपने गैर-निर्यात किए गए चर और मेरे निर्यात किए गए चर के बीच मेल नहीं खाता हूं, या यह स्वचालित रूप से निर्यात किए गए अपडेट को अपडेट भी करेगा? – ArtOfWarfare
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
यह जांचता है कि $ VARIABLE की लंबाई शून्य है या नहीं।
क्या आप क्या करना चाहते बैश में देशी है, यह कहा जाता है पैरामीटर प्रतिस्थापन:
VARIABLE="${VARIABLE:=abc}"
चर सेट नहीं है, तो दाहिने हाथ की ओर एबीसी के बराबर हो जाएगा। ध्यान दें कि आंतरिक ऑपरेटर: = को प्रतिस्थापित किया जा सकता है: - यदि परीक्षण किया जाता है तो VARIABLE सेट या खाली नहीं है।
बिल्कुल वही जो मैं खोज रहा था। लाइन 'निर्यात TEST_DATABASE_NAME =" $ {TEST_DATABASE_NAME: = prodlike} "' TEST_DATABASE_NAME को पहले से परिभाषित नहीं किया गया था, तो केवल डिफ़ॉल्ट के रूप में प्रोड्लिक जैसा ही उपयोग करेगा। कोई गन्दा सशर्त ब्लॉक नहीं। सभी कोड की एक पंक्ति में। –
मानक समाधान सशर्त एक चर आवंटित करने के लिए (वातावरण में है या नहीं) है:
: ${VAR=foo}
कि मूल्य "foo" केवल अगर यह सेट नहीं होने के लिए वीएआर सेट हो जाएगा।
वीएआर को "foo" सेट करने के लिए करता है, तो वीएआर सेट नहीं है या खाली स्ट्रिंग, इस्तेमाल होता है:
: ${VAR:=foo}
वातावरण में वीएआर में कहें, साथ पालन करें:
export VAR
तुम भी कर सकते हैं export VAR=${VAR-foo}
या export VAR=${VAR:=foo}
, लेकिन कुछ पुराने गोले एक ही पंक्ति में असाइनमेंट और निर्यात के सिंटैक्स का समर्थन नहीं करते हैं। इसके अलावा, DRY; =
ऑपरेटर के दोनों किनारों पर नाम का उपयोग अनावश्यक पुनरावृत्ति है। (चर का निर्यात करने वाली दूसरी पंक्ति एक ही प्रिंसिपल का उल्लंघन करती है, लेकिन बेहतर महसूस करती है।)
ध्यान दें कि सामान्य रूप से यह निर्धारित करना बहुत मुश्किल है कि वातावरण में कोई चर है या नहीं। env
के आउटपुट को पार्स करना काम नहीं करेगा। पर विचार करें:
export foo='
VAR=var-value'
env | grep VAR
न ही यह एक subshell और परीक्षण अंडे देने के लिए काम करता है:
sh -c 'echo $VAR'
कि वीएआर का संकेत होगा subshell में सेट कर दिया जाता है, जो एक संकेत है कि वीएआर के वातावरण में है हो सकता है वर्तमान प्रक्रिया, लेकिन यह बस हो सकता है कि VAR को सबहेल के प्रारंभ में सेट किया गया हो। कार्यात्मक रूप से, हालांकि, परिणाम वही है जैसे वीएआर पर्यावरण में है। सौभाग्य से, आप आमतौर पर परवाह नहीं करते हैं कि वीएआर पर्यावरण में है या नहीं। यदि आपको वहां इसकी ज़रूरत है, तो उसे वहां रखें। यदि आपको इसकी ज़रूरत है, तो इसे बाहर निकालें।
क्या आप '$ {VAR: = foo}' नोटेशन आंतरिक रूप से कैसे काम करते हैं, इस बारे में एक स्पष्टीकरण जोड़ सकते हैं? मैं हमेशा इसे समाधान के रूप में पाता हूं लेकिन वास्तव में यह वास्तव में कैसे काम करता है। –
मुझे [StackOverflow] पर कुछ स्पष्टीकरण मिला (http://stackoverflow.com/questions/4437573/bash-assign-default-value)! –
- 1. जांचें कि क्या चर PHP
- 2. पर्यवेक्षक पर्यावरण चर सेट अप
- 3. जांचें कि क्या लेयर फ्लैग सेट है
- 4. जांचें कि क्या GoogleMap कैनवास तत्व पहले से निष्क्रिय है
- 5. जांचें कि पहले पुश
- 6. जांचें कि एंटी स्क्रिप्ट
- 7. जांचें कि कॉलिंग से पहले फ़ंक्शन मौजूद है या नहीं?
- 8. जांचें कि कोई चर plsql
- 9. जांचें कि क्या सी #
- 10. जांचें कि एक चर रूबी
- 11. जावास्क्रिप्ट जांचें कि कोई चर विंडो है
- 12. जांचें कि क्या एक कैलियर पहले से ही एक sublayer
- 13. जांचें कि क्या कोई संख्या पहले से ही पाइथन
- 14. जांचें कि क्या नोड सेट में XSLT
- 15. क्या एक पर्यावरण चर
- 16. जांचें कि कोई चर Twig
- 17. लिंक से एसक्यूएल - पर्यावरण चर
- 18. जांचें कि फ़ाइल पहले से ही स्रोत नियंत्रण में है
- 19. जांचें कि कोई स्थिर पहले से ही परिभाषित है
- 20. गणित में पर्यावरण चर सेट करना
- 21. कैसे जांचें कि कोई पर्यावरण चर या तो अनसेट या खाली स्ट्रिंग पर सेट है या नहीं?
- 22. जांचें कि क्या चर स्ट्रिंग या सरणी है Twig
- 23. XDG_SESSION_COOKIE पर्यावरण चर के लिए क्या है?
- 24. CMAKE_INSTALL_PREFIX पर्यावरण चर - काम नहीं करता है?
- 25. एक पर्यावरण चर सेट करते समय रूबी से बाहर शैल
- 26. जांचें कि क्या संपत्ति फ़िंग
- 27. चींटी स्क्रिप्ट में पर्यावरण चर सेट करना
- 28. जांचें कि क्या जेएसपी खंड सेट किया गया है
- 29. जांचें कि चर के किसी सूची में केवल एक चर सेट है
- 30. जांचें कि क्या पाइथन
दरअसल, यह उस प्रश्न का सही डुप्लिकेट नहीं है: ओपी यहां जानना चाहता है कि एक चर सेट किया गया था, और यदि कोई स्क्रिप्ट छोड़ने के बजाय इसके बारे में कुछ नहीं करता है। $ {V :?} उस मामले में एक वैध उत्तर नहीं है। 'सेट | grep -q '^ वी =' 'है। वैरिएबल की उपस्थिति के लिए यह परीक्षण और वर्क्स सेट किए जाने पर भी खाली स्ट्रिंग पर काम करता है। – Coroos