AWS ELBv2规则主机转数组异常:追加元素未正确加入数组求助
问题排查:ELBv2主机列表字符串转bash数组失败
问题原因
你通过jq输出的是JSON格式的字符串,并非bash环境中可直接操作的数组类型。直接使用TESTOUTPUT+="host4.cloud"本质是字符串拼接,自然会把新内容直接追加在原有字符串末尾,导致格式混乱。
解决方案
方案1:转为bash原生数组操作
先将JSON中的主机列表提取为bash数组,再进行元素追加:
# 提取主机列表并转为bash数组 readarray -t HOSTS < <(aws elbv2 describe-rules --rule-arns arn:aws:elasticloadbalancing:ap-northeast-1:xxxx:listener-rule/app/k8s-ctrlroute-xxx/xxx/xxx --region ap-northeast-1 --no-cli-pager | jq -r '.Rules[0].Conditions[0].Values[]') # 追加新主机 HOSTS+=("host4.cloud") # 验证结果 printf "%s\n" "${HOSTS[@]}"
jq -r:输出不带引号的原始字符串,避免bash数组包含多余引号readarray -t:将每行内容存入数组HOSTS,并自动去除换行符
方案2:用jq直接修改JSON数组
如果需要保持JSON格式的字符串输出,可直接在jq中完成数组追加:
TESTOUTPUT=$(aws elbv2 describe-rules --rule-arns arn:aws:elasticloadbalancing:ap-northeast-1:xxxx:listener-rule/app/k8s-ctrlroute-xxx/xxx/xxx --region ap-northeast-1 --no-cli-pager | jq '[.Rules[0].Conditions[0].Values[]] + ["host4.cloud"]') # 验证结果 echo "$TESTOUTPUT"
该命令会直接生成包含新元素的JSON数组字符串,输出格式为:
[ "host1.cloud", "host2.cloud", "host3.cloud", "host4.cloud" ]
内容的提问来源于stack exchange,提问作者IFThenElse
相关产品推荐
相关产品推荐

