eval as if 语句条件

Alp*_*eta 4 linux bash if-statement eval

为什么以下语句的输出为真?

VAR="[[ "x"=="y" ]]"
if eval $VAR ; then
    echo "true"
else
    echo "false"
fi
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以使用变量作为 bash 中 if 语句的条件?

anu*_*ava 5

您的引用是一个问题,您需要在周围留出空格==

VAR='[[ "x" == "y" ]]'
if eval $VAR ; then
    echo "true"
else
    echo "false"
fi
Run Code Online (Sandbox Code Playgroud)

但是,您必须eval尽可能避免使用。您可以在此处使用函数:

fvar() { [[ "x" == "y" ]]; }
Run Code Online (Sandbox Code Playgroud)

然后将其称为:

if fvar; then
    echo "true"
else
   echo "false"
fi
Run Code Online (Sandbox Code Playgroud)

原因为什么你的eval病情正在评估到true,因为你VAR="[[ "x"=="y" ]]"里面的文字,其中[[]]被视为一个字符串。这与评估[[ a ]][[ foo ]]