Cra*_*tis 0 bash shell if-statement
我在Fedora 27下运行Bash 4.4.19,我有一个简单的脚本:
#!/bin/bash
TESTENV="Hello"
echo "$TESTENV"
if [ -v $TESTENV ]; then
echo "Yup"
fi
echo "Done"
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它打印:
Hello
./myscript: line 3: [: Hello: binary operator expected
Done
Run Code Online (Sandbox Code Playgroud)
所以,我将额外的括号添加到第3行,现在看起来像:
if [[ -v $TESTENV ]]; then
Run Code Online (Sandbox Code Playgroud)
但产生:
Hello
Done
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?我希望看到上面一个/两个的"Yup".我试过"$TESTENV"用引号括起来,而且我也尝试过-z运算符 - 但行为是一样的.
使用$,您使用的是变量的值,而不是变量名称本身.你可能意味着:
if [[ -v TESTENV ]]; then
echo "Yup"
fi
Run Code Online (Sandbox Code Playgroud)
如果您定义了名为Hello(例如Hello=hi)的变量,则if条件会成功,您可能根本没有注意到该问题:)