Shell/Bash中字符串相等检查匹配成功却返回1的问题咨询
问题根因
- AWS CLI 默认输出为JSON格式,你通过
--query提取字符串字段时,返回结果会自带JSON格式的双引号包裹,也就是说$ri_status实际存储的是"successful"(包含前后两个双引号),而非纯文本的successful,二者自然不相等。 - 你在test命令中没有给变量加双引号包裹,若变量中存在空格、换行符或其他不可见字符时,Shell会先对变量做分词处理,导致test的参数结构异常,返回非0状态码。
修复步骤
- 首先修改AWS CLI命令,增加
--output text参数,强制输出纯文本,去除JSON格式自带的双引号,同时建议用$()替代反引号存储命令输出,兼容性更好:
ri_status=$(aws dms describe-connections --filter Name=replication-instance-arn,Values=$ri_arn --query=Connections[0].Status --region us-east-1 --output text)
- 执行比较时,必须给变量加上双引号包裹,避免分词问题:
test "$ri_status" = "successful" echo $?
- 如果调整后仍不匹配,可以用以下命令打印变量的所有字符(包括不可见字符),排查是否有多余的换行、空格等:
# 打印变量的逐字符解析结果 echo -n "$ri_status" | od -c
内容的提问来源于stack exchange,提问作者marcin2x4
相关产品推荐
相关产品推荐

