linux - eval as if 语句条件

标签 linux bash if-statement eval

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

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

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

最佳答案

您的引用有问题,您需要在 == 周围加空格:

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 ]]

相同

关于linux - eval as if 语句条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32259648/

相关文章:

javascript - 隐藏变量直到需要为止?

php - 使用 PHP 5.3.x 安全删除

ruby-on-rails - 为什么我的 Git Bash 不能访问 "bundle"?

linux - 在后台运行您自己的 python 脚本

linux - 在 bash 中使用 for 循环检查数组元素是否为空

linux - 使用来自终端的别名创建一个 git repo

ios - Xcode - 源文件中的无效字符(将 ""替换为 "")

ruby-on-rails - 当 "views"应设置为 RoR 中的条件时,条件(if/else)的语法?

linux - 为什么它不通过管道传输到 cd 命令?

linux - 智能 : Big cursor on darcula theme