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 语句的条件?
您的引用是一个问题,您需要在周围留出空格==:
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 ]]