双括号在使用eval时加“-n”
double brackets add "-n" when use eval
我目前正在尝试使用 [[]] 和评估代码进行动态测试,但是在条件开头自动添加了 -n .所以我的条件总是正确的...
这里有一个 set -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?因为只有一个参数 ?
我怎样才能让它按我想要的方式工作?
[[
隐式禁用字符串拆分,这样扩展就不会拆分为多个参数。
单项测试隐式运行 -n
,测试该项目是否为空字符串。
因此,如果您希望将条件的各个部分作为 [[
的单独参数进行评估,您应该在 中 [[
eval
,这样条件被替换为它包含的文本 before [[
的解析规则生效。
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
我目前正在尝试使用 [[]] 和评估代码进行动态测试,但是在条件开头自动添加了 -n .所以我的条件总是正确的...
这里有一个 set -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?因为只有一个参数 ?
我怎样才能让它按我想要的方式工作?
[[
隐式禁用字符串拆分,这样扩展就不会拆分为多个参数。
单项测试隐式运行 -n
,测试该项目是否为空字符串。
因此,如果您希望将条件的各个部分作为 [[
的单独参数进行评估,您应该在 中 [[
eval
,这样条件被替换为它包含的文本 before [[
的解析规则生效。
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