[[
неявно отключает разбиение строки, так что расширение не разбивается на несколько аргументов.
Одноэлементный тест неявно запускает -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