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

Bash循环遍历Key Vault Secret仅输出最后一项 如何获取全部匹配结果

问题根因

你的脚本存在3个核心问题,导致无法输出所有符合条件的Secret:

  • 数组赋值方式错误:直接用declare -a a1=$(命令)的写法,不会把命令的每行输出识别为数组元素,Bash默认会按空白字符分割输出内容,最终数组元素和你预期的Secret列表完全不匹配
  • 输出格式选择错误:-o table参数会输出表格表头、排版分隔符等冗余内容,仅适合人工查看,无法直接被脚本解析
  • JMESPath查询字段不对:当前查询返回的是完整的Secret对象,不是你需要打印的Secret名称字段
修复后的完整脚本
VaultName="ketv1"
# 按行读取命令输出到数组,查询时直接返回符合条件的Secret名称,用tsv格式输出无冗余内容
mapfile -t a1 < <(az keyvault secret list --vault-name "$VaultName" --query "[?attributes.expires<='2022-08-30'].name" -o tsv)

for i in "${a1[@]}"
do
  # 过滤可能存在的空行
  if [ -n "$i" ]; then
    echo "$i"
  fi
done
关键修改说明
  • 用mapfile -t命令将az cli的每行输出映射为数组的独立元素,避免内容分割错误
  • 将输出格式从table改为tsv,纯文本按行输出无多余排版内容,适合脚本解析
  • 在JMESPath过滤条件后追加.name,直接返回Secret名称字段,不需要额外处理整个对象结构
  • 给变量引用加双引号,避免Vault名称等含特殊字符时出现执行错误
  • 增加空行判断,避免输出无效空行

如果执行后发现时间匹配不符合预期,可以将查询条件中的截止时间补全为UTC完整时间格式,例如[?attributes.expires<='2022-08-30T23:59:59Z']即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:10:01