Я пытаюсь проверить значение переменной окружения и в зависимости от значения делать определенные вещи, и это работает нормально, пока переменная установлена. Когда этого не происходит, я получаю целую кучу ошибок (поскольку 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
Мой вопрос: разве «unset TESTVAR» не должен его аннулировать? Кажется, это не так ...