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

使用yq向嵌套YAML的allOf数组追加元素失败,求解决方法

解决思路与修正方案

问题分析

原脚本存在三个核心问题:

  1. YAML路径错误:
    • paths.T_PATH 是数组结构(YAML中的 - 标识数组元素),需要用索引 [0] 定位到目标元素;
    • allowed_methods 和 auth 是同级节点,原路径错误地将 allowed_methods 作为 auth 的父节点,导致无法定位到 jwt 配置项。
  2. 未写入文件:原 yq 命令仅将修改结果输出到终端,未保存回原文件,需添加 -i(原地修改)参数。
  3. 数组遍历不严谨:for i in ${nemo[@]} 未加引号,若数组元素包含空格会被错误拆分,应改为 "${nemo[@]}"。

修正后的脚本

假设使用的是当前主流的 mikefarah/yq 版本,修正后的脚本如下:

for i in "${nemo[@]}"; do
  yq -i ".routes.T_NAME.paths.T_PATH[0].auth.jwt.scopes.allOf += \"${i}\"" note.yaml
done

额外说明

  • 若使用的是 kislyuk/yq 版本,追加数组元素的语法需调整为:
    for i in "${nemo[@]}"; do
      yq -y '.routes.T_NAME.paths.T_PATH[0].auth.jwt.scopes.allOf += ["'"${i}"'"]' note.yaml > temp.yaml && mv temp.yaml note.yaml
    done
    
  • 若 T_PATH 下存在多个数组元素需要批量修改,可将 [0] 替换为 [] 实现遍历所有元素:
    yq -i ".routes.T_NAME.paths.T_PATH[].auth.jwt.scopes.allOf += \"${i}\"" note.yaml
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:25:00