为什么以下语句的输出为真?
VAR="[[ "x"=="y" ]]"
if eval $VAR ; then
echo "true"
else
echo "false"
fi
还有其他方法可以将变量用作bash中if语句的条件吗?
答案 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 ]]