我有一个变量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
我得到这种情况,它缺少qazxsw poi案例,并直接回应qazxsw poi。这显然不是预期的行为。
1)如何解决这个问题,以便case语句正确捕获ROLLBACK_COMPLETE案例?
2)如果不是字符串,ROLLBACK_COMPLETE
变量究竟是什么?
编辑:附加信息
运行aws命令并通过以下方式将结果写入文件:
"updating stack with stack status: ROLLBACK_COMPLETE"
导致包含单行的文件:
$STACK_STATUS
aws cloudformation describe-stacks --query "Stacks[?StackName == '${STACK_NAME}'].StackStatus | [0]" > aws.out
的价值不是
"ROLLBACK_COMPLETE"
它的
$STACK_STATUS
双引号不是shell语法,它们是命令输出和变量值的一部分。
替换这个:
ROLLBACK_COMPLETE
这样:
"ROLLBACK_COMPLETE"
这是一个小脚本来演示:
ROLLBACK_COMPLETE)
输出:
'"ROLLBACK_COMPLETE"')