bash - 使用eval时双括号加“-n”
问题描述
我目前正在尝试使用 [[]] 进行动态测试并评估代码,但是在条件开始时会自动添加一个-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
包含的文本。 [[
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
推荐阅读
- javascript - 如何在 mysql 查询中编写 javascript 代码?
- email - 使用谷歌脚本使用本地客户端outlook发送电子邮件
- android-wear-2.0 - 无法连接到 Android Wearable Health Services
- python - GridSearchCV 显示了改进的召回率,但是预测后计算出的召回分数仍然更少,这可能是什么问题?
- c# - Azure Pipline 问题 - 未找到 Specflow 外部数据包使用的 ExcelDataReader
- ios - Apple Push Notification apns-collapse-id 不适用于自定义声音
- excel - 计算时差并将其与 Google Apps 脚本进行比较
- java - 从带有声明的 azure 请求令牌,声明未设置
- imageresizer - ImageResizer - 使用 ImageHandlerSyntax 插件映射 URL
- javascript - 如何在 VS 中从功能文件导航到步骤定义文件