"test -v $ TESTENV"总是假,即使定义了TESTENV

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运算符 - 但行为是一样的.

P.P*_*.P. 5

使用$,您使用的是变量的,而不是变量名称本身.你可能意味着:

if [[ -v TESTENV ]]; then
    echo "Yup"
fi
Run Code Online (Sandbox Code Playgroud)

如果您定义了名为Hello(例如Hello=hi)的变量,则if条件会成功,您可能根本没有注意到该问题:)