मैं यह सुनिश्चित करना चाहता हूं कि एक स्क्रिप्ट के एक निश्चित बिंदु पर, source
एक कॉन्फ़िगरेशन फ़ाइल के बाद , कई चर निर्धारित किए जाते हैं और, यदि वे निष्पादन को रोकने के लिए नहीं हैं, तो उपयोगकर्ता को लापता चर के बारे में बताएं। मैंने कोशिश की है
for var in $one $two $three ; do
...
लेकिन अगर उदाहरण के लिए $two
सेट नहीं किया गया है, तो लूप को कभी भी निष्पादित नहीं किया जाता है $two
। अगली चीज़ जो मैंने कोशिश की थी
for var in one two three ; do
if [ -n ${!var} ] ; then
echo "$var is set to ${!var}"
else
echo "$var is not set"
fi
done
लेकिन अगर दो सेट नहीं है, तो मुझे अभी भी "दो सेट है" के बजाय "दो सेट नहीं है"।
मैं यह कैसे सुनिश्चित कर सकता हूं कि सभी आवश्यक चर सेट हैं?
अद्यतन / समाधान: मुझे पता है कि "सेट" और "सेट, लेकिन खाली" के बीच अंतर है। अब मैं उपयोग करता हूं ( /programming//a/16753536/3456281 और इस सवाल के जवाब के लिए धन्यवाद ) निम्नलिखित हैं:
if [ -n "${!var:-}" ] ; then
इसलिए, यदि var
सेट किया गया है, लेकिन खाली है, तब भी इसे अमान्य माना जाता है।
set -u
जब कोई अनसेट चर का उपयोग किया जाता है, तो आप इसे तुरंत समाप्त करने के लिए अपनी स्क्रिप्ट की शुरुआत में भी जोड़ सकते हैं ।