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 [ "$TESTVAR" = "foo" ]

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

if [ "" = "foo" ]

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

if [  = "foo" ]

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


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

if [ -n $TESTVAR ]

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

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

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

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

if [[ $TESTVAR ]]

लापता TESTVAR की व्याख्या के बाद आप [== "y"] का मूल्यांकन कर रहे हैं। इनमें से कोई भी प्रयास करें:

  • "$ TESTVAR"
  • X $ TESTVAR == Xy
  • $ {TESTVAR: - ''}




shell