因此,我似乎爱上了 * 包含 * 函数定义,因为:
yq -n '["hyper"]|contains(["pe"])'
'surprisingly'返回true。我不知道这在什么情况下有用,对functolan世界来说还是新的,但它在文档中清楚地显示为:
jq 'contains(["baz", "bar"])'
Input ["foobar", "foobaz", "blarp"]
Output true
那么,如何简单地编写精确匹配的字符串包含在数组包含中呢?
yq -n '["hyper"] as $i | $i - ["pe"] != $i'
?或者正确的解决方案是什么?
2条答案
按热度按时间xxhby3vn1#
请指定您正在使用的
yq
的which implementation。由于您在stedolan/jq的手册中引用了contains
过滤器的示例,我假设您正在使用kislyuk/yq,它是jq的YAML Package 器。jq的
contains
测试它的参数是否部分包含在输入中,因为这是递归的,所以它也会影响数组的字符串项,而不仅仅是周围的数组本身,因为"pe"
包含在"hyper"
中,所以它的值为true
。jq提供了
any
过滤器来测试在给定的流中是否至少有一个项对于给定的过滤器计算为true
.对于该过滤器,您可以使用等于==
操作符,它计算为true
以获得精确匹配,对于流,如果省略,any
将默认为输入数组中的项.为了以防万一,如果你使用另一个实现mikefarah/yq,它提供了一个类似的函数
any_c
(因为它不是基于jq的,因此(有时)有不同的语法):一个二个一个一个
vddsk6oq2#
假设是一个类似于jq的实现,您可以使用
IN
(大写)IN()
的参数是元素的 * 流 *,而不是数组。