使用yq向嵌套YAML的allOf数组追加元素失败,求解决方法
解决思路与修正方案
问题分析
原脚本存在三个核心问题:
- YAML路径错误:
paths.T_PATH是数组结构(YAML中的-标识数组元素),需要用索引[0]定位到目标元素;allowed_methods和auth是同级节点,原路径错误地将allowed_methods作为auth的父节点,导致无法定位到jwt配置项。
- 未写入文件:原
yq命令仅将修改结果输出到终端,未保存回原文件,需添加-i(原地修改)参数。 - 数组遍历不严谨:
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
相关产品推荐
相关产品推荐

