У меня есть переменная STACK_STATUS, которой присваивается значение из команды, но я не могу определить, что именно является значением.Кажется, что это строка, но если вы делаете тест на равенство с эквивалентной строкой, он возвращает false.Особый случай:
STACK_STATUS=$(aws cloudformation describe-stacks --query "Stacks[?StackName == '${STACK_NAME}'].StackStatus | [0]")
В этом случае echo $STACK_STATUS
возвращает "ROLLBACK_COMPLETE"
, однако [ ${STACK_STATUS} == "ROLLBACK_COMPLETE" ]; echo $?
возвращает 1
(он должен вернуть ноль, если они были одинаковыми).Сначала я предполагал, что это как-то связано с чрезмерными цитатами, но я пробовал несколько версий этого с разными уровнями кавычек, и это не совпадает.
В результате, когда я пытаюсь написать команду вроде:
case "$STACK_STATUS" in
null)
echo "stack does not exist, creating it"
echo "do some stuff"
;;
ROLLBACK_COMPLETE)
echo "stack is in ROLLBACK_COMPLETE, deleting and rebuilding"
echo "do some other stuff"
;;
*)
echo "updating stack with stack status: $STACK_STATUS"
echo "do extra stuff"
;;
esac
, я получаю такую ситуацию, когда в ней отсутствует регистр ROLLBACK_COMPLETE
, и напрямую выводит "updating stack with stack status: ROLLBACK_COMPLETE"
.Это явно не предполагаемое поведение.
1) Как это исправить, чтобы оператор case правильно перехватывал регистр ROLLBACK_COMPLETE?
2) Что именно является переменной $STACK_STATUS
, если нетстрока?
РЕДАКТИРОВАТЬ: Дополнительная информация
Выполнение команды aws и запись результата в файл с помощью:
aws cloudformation describe-stacks --query "Stacks[?StackName == '${STACK_NAME}'].StackStatus | [0]" > aws.out
приводит кфайл, содержащий одну строку:
"ROLLBACK_COMPLETE"