使用eval时,双括号添加“ -n”

时间:2018-10-03 15:43:51

标签: bash testing eval built-in square-bracket

我目前正在尝试使用[[]]和经过评估的代码进行动态测试,但是在条件开始时会自动添加一个 -n 。所以我的条件永远是真的...

以下是带有-x的示例:

myCondition='${queueName} == ${pattern}'
pattern="COMPLETELY_DIFFERENT_PATTERN"
queueName="QM.GCS.SRC.TOTO"
set -x ; [[ $(eval echo $myCondition ) ]] && echo CORRECT; set +x
++ eval echo '${queueName} == ${pattern}'
+++ echo QM.GCS.SRC.TOTO == COMPLETELY_DIFFERENT_PATTERN
+ [[ -n QM.GCS.SRC.TOTO == COMPLETELY_DIFFERENT_PATTERN ]]
+ echo CORRECT
CORRECT
+ set +x

为什么添加-n?因为只有一个参数?

我如何使其能够按需工作?

1 个答案:

答案 0 :(得分:0)

[[隐式禁用字符串拆分,以使扩展不会拆分为多个参数。

单项测试隐式运行-n,以测试该项目是否为空字符串。

因此,如果您希望将部分条件作为[[的单独参数进行评估,则应在[[内插入eval 将条件替换为包含在之前 [[的解析规则之前的文本。

eval "[[ $myCondition ]]"

因此,这将使您的代码:

myCondition='${queueName} == ${pattern}'
pattern="COMPLETELY_DIFFERENT_PATTERN"
queueName="QM.GCS.SRC.TOTO"
set -x ; eval "[[ $myCondition ]]" && echo CORRECT; set +x

...在stderr上发出预期的日志:

+ eval '[[ ${queueName} == ${pattern} ]]'
++ [[ QM.GCS.SRC.TOTO == COMPLETELY_DIFFERENT_PATTERN ]]
+ set +x