给出简化的输入:
[
[ "gpu" ],
[ "disk" ]
]
我想选择第一个元素为的数组"gpu"
。
我可以用一个简单的条件来做到这一点:
map(select(.[0] == "gpu"))
[
[ "gpu" ]
]
但是我不明白当我尝试使用IN
内置函数时出了什么问题:
map(select(.[0] | IN(["gpu"])))
[]
我用的是jq
1.6
给出简化的输入:
[
[ "gpu" ],
[ "disk" ]
]
我想选择第一个元素为的数组"gpu"
。
我可以用一个简单的条件来做到这一点:
map(select(.[0] == "gpu"))
[
[ "gpu" ]
]
但是我不明白当我尝试使用IN
内置函数时出了什么问题:
map(select(.[0] | IN(["gpu"])))
[]
我用的是jq
1.6
IN/1
定义为def IN(s): any(s == .; .);
,所以map(select(.[0] | IN(["gpu"])))
转换为,map(select(.[0] | any(["gpu"] == .; .)))
但.
在 内部map
是[ "gpu" ]
,因此.[0]
是"gpu"
,不等于,[ "gpu" ]
因此过滤器失败。相反,比较
.[0]
一下"gpu"
:演示
但是,使用
IN
只对压缩多个比较有意义。当然,对于这个单一比较,一个简单的map(select(.[0] == "gpu"))
就足够了。