двойные скобки добавляют "-n" при использовании eval - PullRequest
0 голосов
/ 03 октября 2018

В настоящее время я пытаюсь выполнить динамический тест с [[]] и оцененным кодом, но есть -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 голосов
/ 03 октября 2018

[[ неявно отключает разбиение строки, так что расширение не разбивается на несколько аргументов.

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