我正在尝试从字符串运行测试命令。该字符串包含表达式。
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
。