linux ययन पर्यावरण चर के लिए जाँच कर रहा है




पर्यावरण शिक्षण (4)

"पैरामीटर विस्तार" शीर्षक वाले अनुभाग को देखें, आपको निम्न चीजें मिलेंगी:

$ {पैरामीटर: निर्धारित की शब्द}
डिफ़ॉल्ट मान का उपयोग करें। यदि पैरामीटर अशांत या अशक्त है, तो शब्द का विस्तारक सिओन प्रतिस्थापित किया जाता है। अन्यथा, पैरामीटर का मान प्रतिस्थापित किया जाता है।

मैं एक पर्यावरण चर के मूल्य की जांच करने की कोशिश कर रहा हूं और मूल्य के आधार पर कुछ चीजें करता है और जब तक चर सेट हो जाता है तब तक यह ठीक काम करता है। जब यह नहीं होता है, तो मुझे त्रुटियों का एक पूरा गुच्छा मिलता है (जैसा कि BASH मैं अपरिभाषित चर के साथ निर्दिष्ट स्ट्रिंग की तुलना करने की कोशिश कर रहा हूं, मुझे लगता है)

मैंने इसे रोकने के लिए एक अतिरिक्त जाँच लागू करने की कोशिश की लेकिन कोई भाग्य नहीं। मैं उपयोग कर रहा कोड का ब्लॉक है:

#!/bin/bash

if [ -n $TESTVAR ]
then
  if [ $TESTVAR == "x" ]
  then
    echo "foo"
    exit
  elif [ $TESTVAR == "y" ]
  then
    echo "bar"
    exit
  else
    echo "baz"
    exit
  fi
else
  echo -e "TESTVAR not set\n"
fi

और यह आउटपुट है:

$ export TESTVAR=x
$ ./testenv.sh 
foo
$ export TESTVAR=y
$ ./testenv.sh 
bar
$ export TESTVAR=q
$ ./testenv.sh 
baz
$ unset TESTVAR
$ ./testenv.sh 
./testenv.sh: line 5: [: ==: unary operator expected
./testenv.sh: line 9: [: ==: unary operator expected
baz

मेरा सवाल है, 'परेशान TESTVAR' इसे रद्द नहीं करना चाहिए? यह मामला नहीं लगता ...


मान सेट है या नहीं यह देखने के लिए आपका परीक्षण

if [ -n $TESTVAR ]

वास्तव में सिर्फ यह देखने के लिए परीक्षण करता है कि क्या मान किसी रिक्त स्ट्रिंग के अलावा किसी और चीज़ के लिए सेट है । का निरीक्षण करें:

$ unset asdf
$ [ -n $asdf ]; echo $?
0
$ [ -n "" ]; echo $?
1
$ [ -n "asdf" ]; echo $?
0

याद रखें कि 0 मतलब सच है।

यदि आपको मूल बॉर्न शेल के साथ संगतता की आवश्यकता नहीं है, तो आप बस उस प्रारंभिक तुलना को बदल सकते हैं

if [[ $TESTVAR ]]

बैश (और ksh और zsh) में, यदि आप डबल वर्ग ब्रैकेट का उपयोग करते हैं, तो आपको उन्हें शून्य या परेशान होने से बचाने के लिए चर को उद्धृत करने की आवश्यकता नहीं है।

$ if [ $xyzzy == "x" ]; then echo "True"; else echo "False"; fi
-bash: [: ==: unary operator expected
False
$ if [[ $xyzzy == "x" ]]; then echo "True"; else echo "False"; fi
False

इसके और भी फायदे हैं


चर को दोहरे-उद्धरणों में संलग्न करें।

if [ "$TESTVAR" = "foo" ]

यदि आप ऐसा करते हैं और चर खाली है, तो परीक्षण का विस्तार होता है:

if [ "" = "foo" ]

यदि आप इसे उद्धृत नहीं करते हैं, तो इसका विस्तार होता है:

if [  = "foo" ]

जो एक सिंटैक्स त्रुटि है।





shell