如何合并两个YAML文件以实现相同路径列表内容叠加扩展需求
解决方案
你可以用命令行YAML处理工具 yq(mikefarah/yq v4及以上版本)实现需求,不需要重复编写公共YAML内容,有两种常用实现方式:
方式1:直接在脚本中追加指定列表元素
如果触发条件时只需要追加固定元素,不需要额外的增量YAML文件,直接操作基础YAML即可:
- 你的基础YAML文件记为
base.yaml - 脚本中条件满足时执行以下命令:
# 此处替换为你自己的条件判断逻辑 if [ $YOUR_CONDITION = true ]; then yq '.friends[0].family.extended.cousins += ["Arthur", "Michael", "Frank"]' base.yaml > final.yaml fi
命令中+=操作符会直接在目标列表末尾追加元素,其他所有公共字段完全保留。
方式2:合并两个YAML文件,自动追加同路径列表
如果你需要将增量配置单独存为YAML文件,也可以用yq的合并规则实现:
- 增量YAML文件
add.yaml只需要写需要追加的字段,不需要重复公共内容:
friends: - friendName: Bob family: extended: cousins: - Arthur - Michael - Frank
- 执行合并命令,
*+操作符会自动合并同路径列表:
yq '. *=+ load("add.yaml")' base.yaml > final.yaml
该命令的合并规则符合你的要求:
- 路径不同的字段全部保留
- 同路径为普通值时,后续值覆盖原有值
- 同路径为列表时,后续列表的元素自动追加到原有列表末尾
内容的提问来源于stack exchange,提问作者Sabo Boz
相关产品推荐
相关产品推荐

