eval,如同声明条件

时间:2015-08-27 21:22:27

标签: linux bash if-statement eval

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

VAR="[[ "x"=="y" ]]"
if eval $VAR ; then
    echo "true"
else
    echo "false"
fi

还有其他方法可以将变量用作bash中if语句的条件吗?

1 个答案:

答案 0 :(得分:3)

您的报价是一个问题,您需要==周围的空格:

VAR='[[ "x" == "y" ]]'
if eval $VAR ; then
    echo "true"
else
    echo "false"
fi

但是,您必须尽量避免使用eval。你可以在这里使用一个函数:

fvar() { [[ "x" == "y" ]]; }

然后将其称为:

if fvar; then
    echo "true"
else
   echo "false"
fi

原因为什么eval条件正在评估true,因为VAR="[[ "x"=="y" ]]"[[内的文字]]被视为单个字符串。这与评估[[ a ]][[ foo ]]

相同