कृपया ध्यान दें: इस साइट पर एक एकल शैल चर का परीक्षण करने के तरीके के बारे में कई प्रश्न हैं। यह प्रश्न किसी भी अपरिभाषित चर के लिए एक स्क्रिप्ट का परीक्षण करने के बारे में है।मैं बैश उपचार अपरिभाषित चर को त्रुटियों के रूप में कैसे बना सकता हूं?
आप निष्पादन में किसी भी त्रुटि देखे बिना बैश में एक अपरिभाषित चर का उपयोग कर सकते हैं:
#!/bin/bash
echo ${UNDEF_FILE}
ls -l ${UNDEF_FILE}
exit 0
मैं इस बहुत त्रुटियों की संभावना मिल गया है। अगर मैं एक बड़े स्क्रिप्ट में एक चर का नाम बदलना चाहता हूं, या उस चर को हटा देना चाहता हूं, तो पिछले सभी पुराने संदर्भ स्क्रिप्ट में त्रुटियों का कारण बनेंगे। कभी-कभी डीबग करने के लिए यह स्पष्ट नहीं होता है या जब आप बहुत देर हो जाते हैं तो आपको पता चलता है।
इसकी अनुमति क्यों है? अपरिभाषित चर को ध्वजांकित करने का कोई तरीका है?
"क्यों" 1 9 70 के युग के गोले के साथ संगतता पर वापस जाते हैं। यदि आप इतिहास के विरोध में, सर्वोत्तम जांच के बारे में परवाह करते हैं, तो स्थिर जांच - http://shellcheck.net/ के साथ, जो डाउनलोड के लिए भी उपलब्ध है [एक स्टैंडअलोन टूल के रूप में] (https://github.com/koalaman/शेलचेक) - आपका दोस्त यहाँ है। –
स्पष्ट रूप से, अपरिभाषित चर के विस्तार को गलत बनाने से कई आम मुहावरे टूट जाएंगे। '[[$ var]] और {echo" $ var के साथ कुछ करना "; }, उदाहरण के लिए, 'set -u' के साथ तोड़ देगा:' सेट-ए 'के विपरीत (जो केवल विफलताओं को बनाता है जिन्हें विफल नहीं किया जाता है या असफलताओं में सशर्त के रूप में उपयोग नहीं किया जाता है),' set -u' * प्रत्येक * संदर्भ बनाता है एक अपरिभाषित चर एक त्रुटि। –
(वैसे - ऑल-कैप्स वैरिएबल नाम, पीओएसआईक्स द्वारा परिभाषित अंतरिक्ष में हैं, जो कि शैल या ऑपरेटिंग सिस्टम के अर्थ के साथ पर्यावरण चर के लिए हैं; कम से कम एक लोअर-केस कैरेक्टर वाले वेरिएबल्स का नामस्थान एप्लिकेशन उपयोग के लिए आरक्षित है। यह लागू होता है सभी शैल वैरिएबलों के लिए, केवल पर्यावरण परिवर्तनीय के विपरीत, एक शैल वैरिएबल को स्थापित करने के कारण बाद में पर्यावरण परिवर्तनीय ओवरराइटिंग के साथ नाम साझा किया जाता है)। –