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

使用github.com/mikefarah/yq向YAML文件插入元素失败求助

使用mikefarah/yq 4.26.1添加YAML节点的正确方法

现有YAML内容

category:
  toolSettings: settings.xml

需要添加的节点片段

env:                
    variables:
       - user: ABC
       - passowrd: BCD

期望最终YAML结构

category:
  env:                
    variables:
       - user: ABC
       - passowrd: BCD
  toolSettings: settings.xml

已尝试的无效命令

  • 命令1:
    yq e '."category" +=({env: {variables:[ {"user":"ABC"},{"passowrd":"BCD"}]}})'  jules.yml > tmp.yml
    
  • 命令2:
    yq -i '.category.env.variables[0].user="ABC"' jules.yml > tmp.yml
    yq -i '.category.env.variables[1].passowrd="BCD"' jules.yml > tmp.yml
    

正确解决方法

原因分析

  • 第二个命令无效是因为category下原本不存在env节点,yq无法直接给不存在的父节点的子节点赋值,必须先创建env节点。
  • 第一个命令思路接近,但+=的合并逻辑在部分场景下不如直接赋值或merge操作直观可靠。

可行命令

方法1:直接赋值创建env节点

生成新文件:

yq e '.category.env = {variables: [{user: "ABC"}, {passowrd: "BCD"}]}' jules.yml > tmp.yml

原地修改原文件:

yq -i '.category.env = {variables: [{user: "ABC"}, {passowrd: "BCD"}]}' jules.yml

方法2:使用merge操作合并节点

适合保留category原有内容的同时添加新节点:
生成新文件:

yq e '.category |= merge({env: {variables: [{user: "ABC"}, {passowrd: "BCD"}]}})' jules.yml > tmp.yml

原地修改:

yq -i '.category |= merge({env: {variables: [{user: "ABC"}, {passowrd: "BCD"}]}})' jules.yml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:30:52