我想检查给定的变量是否已设置-v
。我很难理解错误来自哪里。文件中有以下脚本var-test.sh
:
MY_VAR="test"
if [ -v MY_VAR ]; then
echo "MY_VAR set to $MY_VAR"
else
echo "MY_VAR not set"
fi
当我运行它时:./var-test.sh
我得到以下输出:
./var-test.sh: line 3: [: -v: unary operator expected
MY_VAR not set
但是当我在 shell 提示符中调用以下命令时:
MY_VAR="test"; if [ -v MY_VAR ]; then echo "MY_VAR set to $MY_VAR"; else; echo "MY_VAR not set"; fi
shell 不会对-v
操作符产生任何抱怨,并且输出结果"MY_VAR set to test"
与预期一致。这是怎么回事?我是不是忽略了某些显而易见的东西?
我认为这是因为使用单括号。当我切换到使用双括号时:
MY_VAR="test"
if [[ -v MY_VAR ]]; then
echo "MY_VAR set to $MY_VAR"
else
echo "MY_VAR not set"
fi
我收到以下错误:
./var-test.sh: line 3: conditional binary operator expected
./var-test.sh: line 3: syntax error near `MY_VAR'
./var-test.sh: line 3: `if [[ -v MY_VAR ]]; then'
输出zsh --version
:
zsh 5.7.1 (x86_64-apple-darwin19.0)