You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell如何对比JSON数组ID取差集 循环执行Azure CLI删除部署槽位

解决方案

1. 计算两个JSON数组的差集

你的两个变量存储的是curl返回的标准JSON数组,直接用jq做原生数组运算即可,不需要手动做字符串切割,能避免数字部分匹配、格式带空格导致的解析错误,内联命令如下:

OBSOLETE_SLOT_IDS=($(jq -n --argjson slot_arr "$SLOT_IDS" --argjson pr_arr "$PR_IDS" '$slot_arr - $pr_arr | .[]'))
  • 逻辑说明:--argjson会直接把Shell里的JSON字符串识别为jq内部的数组类型,$slot_arr - $pr_arr是jq原生支持的差集运算,返回所有存在于slot数组、不存在于pr数组的元素;最后.[]把差集数组拆成单个值逐行输出,外层的()会把输出结果转为Shell原生数组,直接给后续循环调用。
  • 代入你给出的示例值SLOT_IDS=[1,2,3,4,5]、PR_IDS=[3,4],计算得到的数组元素就是1、2、5,完全符合预期。

2. 遍历差集执行命令的正确写法

拿到Shell原生格式的差集数组后,用标准数组遍历语法写内联循环即可:

for i in "${OBSOLETE_SLOT_IDS[@]}"; do az webapp deployment slot delete -g group --name webapp --slot "pr-$i"; done
  • 写法说明:"${OBSOLETE_SLOT_IDS[@]}"是Shell遍历数组的标准写法,哪怕后续ID出现特殊字符、空格也能正常识别,稳定性远高于直接拼接字符串的遍历方式。
  • 代入示例值后,循环会自动执行三条目标命令:
az webapp deployment slot delete -g group --name webapp --slot pr-1
az webapp deployment slot delete -g group --name webapp --slot pr-2
az webapp deployment slot delete -g group --name webapp --slot pr-5

注意:不要用tr -d '[]' | tr ',' ' '这类纯字符串切割的方式处理JSON数组,一旦curl返回的JSON带空格、ID为字符串类型、格式有微调就会解析失败。jq是处理JSON输出的标准工具,绝大多数运行az cli的环境都默认预装,不需要额外安装。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:45:34