使用字符串中的表达式运行测试

使用字符串中的表达式运行测试

我正在尝试从字符串运行测试命令。该字符串包含表达式。

 TEST="! -e ~/bin/xyz"
 if [ `echo "$TEST"` ]; then
    echo running "$TEST";
 fi

但是,上面的 if 条件确实评估为 true,但如果我直接插入命令(如下所示),它的评估结果为 false。

 if [ ! -e ~/bin/xyz ]; then
    echo running;
 fi

第二个片段的行为是正确的。为什么存在差异以及如何纠正第一个片段以获得正确的结果?

答案1

第一个示例的问题是您正在测试返回的字符串是否echo具有非零长度。解决此问题的一种方法是eval使用经过测试的表达式:

TEST="! -e ~/bin/xyz"
if eval "[ $TEST ]"; then
   echo running "$TEST";
fi

请注意,括号在里面eval,因为[是一个命令,所以我们将变量与作为其参数的变量一起评估该命令$TEST

相关内容