我正在尝试检查环境变量的值,并根据该值做某些事情,只要设置了变量,它就可以正常工作。当它不是虽然我得到一大堆错误时(因为 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’ 不应该取消它吗?好像不是这样的……
原文由 Hamza 发布,翻译遵循 CC BY-SA 4.0 许可协议
用双引号将变量括起来。
如果您这样做并且变量为空,则测试将扩展为:
而如果你不引用它,它会扩展为:
这是一个语法错误。