如何用yq检查YAML列表中指定值是否存在?现有命令返回false
正确检查YAML数组中是否存在指定值的yq命令
你的问题出在has()函数的用法上:这个函数是用来检查**键(key)**是否存在于对象(键值对结构)中的,而.projects.p1是一个数组(列表),不是键值对结构,所以用has()肯定返回false。
针对数组元素的存在性检查,主流的mikefarah/yq有两种常用方法:
- 使用
in运算符,直接判断值是否在数组内:
cat test.yaml | yq '.projects.p1 | "sample/project/app1" in .'
执行后会返回true。
- 使用
any()函数,遍历数组检查是否有匹配的元素(适合需要复杂匹配规则的场景):
cat test.yaml | yq '.projects.p1 | any(. == "sample/project/app1")'
这个命令会逐个检查数组元素,只要有一个匹配就返回true。
内容的提问来源于stack exchange,提问作者rgd
相关产品推荐
相关产品推荐

