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

如何使用yq实现YML文件的Deep Merge(深度合并)?

YAML深度合并的正确yq命令

你之前用的*+d是深度合并数组的操作符,会错误处理对象结构,导致根节点a被异常替换。要实现子节点聚合、终端节点后者优先的深度合并需求,得用递归合并操作符*。

正确命令

yq eval-all '. as $item ireduce ({}; . * $item )' a.yml b.yml

如果是yq v4版本,也可以用简写:

yq ea '. as $item ireduce ({}; . * $item )' *.yml

执行结果

a:
  a: 1
  b: b
  c: 1
b:
  a: a
c:
  a: 1

命令说明

  • eval-all(简写ea):指定yq处理所有输入的YAML文件
  • . as $item ireduce ({}; . * $item ):
    1. 初始化空对象作为合并起始值
    2. 遍历每个输入文件的内容,递归合并到当前结果中
    3. *操作符会自动处理对象合并:相同路径的终端节点用后一个文件的值覆盖;子对象则聚合双方的所有属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:19:58