एक चर को एक खाली स्ट्रिंग निर्दिष्ट करने के लिए कोई लाभ नहीं है और फिर तुरंत इसे एक और चर स्ट्रिंग प्रदान करने के लिए। शेल चर के लिए मान का असाइनमेंट पूरी तरह से इसके पिछले मूल्य को अधिलेखित कर देगा।
मेरी जानकारी में कोई सिफारिश नहीं है जो कहती है कि आपको खाली तारों के लिए चर को स्पष्ट रूप से प्रारंभ करना चाहिए। वास्तव में, ऐसा करने से कुछ परिस्थितियों में त्रुटियाँ हो सकती हैं (यदि नीचे चल रही है तो त्रुटियां स्पष्ट रूप से स्पष्ट होंगी set -u
)।
स्क्रिप्ट के शुरू होने के बाद से अप्रयुक्त चर, या उस unset
पर कमांड चलाने से स्पष्ट रूप से परेशान होने का कोई मूल्य नहीं होगा। इस तरह के एक चर का मूल्य कुछ भी नहीं होगा। यदि इसका उपयोग किया जाता है "$myvariable"
, तो आपको इसके बराबर मिलेगा ""
, और आपको कभी भी "कचरा डेटा" नहीं मिलेगा।
यदि शेल विकल्प या nounset
तो के साथ सेट किया गया है , तो एक अस्थिर वैरिएबल को संदर्भित करने से शेल को एक त्रुटि उत्पन्न होगी (और एक गैर-इंटरैक्टिव शेल समाप्त हो जाएगा):set -o nounset
set -u
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
या में bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
शेल वेरिएबल को पर्यावरण द्वारा आरम्भ किया जाएगा यदि चर का नाम किसी मौजूदा पर्यावरण चर से मेल खाता है।
यदि आप उम्मीद करते हैं कि आप एक ऐसे चर का उपयोग कर रहे हैं जो पर्यावरण द्वारा इस तरह से शुरू किया जा सकता है (और यदि यह अवांछित है), तो आप अपनी स्क्रिप्ट के मुख्य भाग से पहले इसे स्पष्ट रूप से अनसेट कर सकते हैं:
unset myvariable # unset so that it doesn't inherit a value from the environment
जो इसे पर्यावरण चर के रूप में भी हटा देगा, या, आप केवल इसके प्रारंभिक मूल्य को अनदेखा कर सकते हैं और इसे असाइनमेंट के साथ अधिलेखित कर सकते हैं (जिससे पर्यावरण चर परिवर्तन मान भी हो जाएगा)।
आप शेल वेरिएबल में अनइंस्टाल्यूटेड कचरा कभी नहीं मारेंगे (जब तक कि, जैसा कि कहा गया है, कि कचरा पहले से ही एक ही नाम से एक पर्यावरण चर में मौजूद है)।