Shell/Bash中赋值AWS CLI结果到变量后出现多余字符如何解决
多余字符含义
"是双引号(")的HTML实体编码,调用AWS接口时,参数中携带的双引号被自动转义为该编码,导致最终传入的ARN首尾多出无效字符,和实际ARN不匹配触发报错。
问题根因
调用AWS CLI获取ARN时未指定纯文本输出格式,AWS CLI默认返回的JSON格式中字符串类型的返回值会自带包裹双引号,这些双引号被一起存入了dms_arn变量。执行echo时看到的双引号是变量本身携带的内容,并不是echo语句外层引号的输出效果。
另外原命令中--query参数前多了一个多余的反引号,也存在语法隐患。
解决方法
修改获取ARN的命令,追加--output text参数,指定AWS CLI直接返回纯文本结果,去掉JSON格式自带的包裹双引号:
dms_arn=$(aws dms describe-replication-tasks --filter Name=replication-task-id,Values="$dms_name" --query=ReplicationTasks[0].ReplicationTaskArn --region us-east-1 --output text)
修改后可以执行echo "|${dms_arn}|"验证结果,正常输出下ARN首尾不会再有多余双引号,即可正常传入StopReplicationTask接口调用。
内容的提问来源于stack exchange,提问作者marcin2x4
相关产品推荐
相关产品推荐

