无法在 for 循环中找到与 yq 的匹配项

Unable to find match with yq in for loop

我有一个名为 teams.yml 的 yaml 文件,如下所示:

test:
  bonjour: hello
loop:
  bonjour: allo

我想遍历一个数组并获取与 yaml 中的键匹配的值。我已经尝试 yq e 'keys | .[] | select(. == "test")' .github/teams.yml 并且它 returns testyq e 'keys | .[] | select(. == "abc")' .github/teams.yml returns 没有什么足以获得我感兴趣的信息。

问题是,当在 for 循环中使用相同的逻辑时,yq returns nothing:

#!/bin/bash

yq e 'keys | .[] | select(. == "abc")' .github/teams.yml # Prints nothing
yq e 'keys | .[] | select(. == "test")' .github/teams.yml # Prints 'test'

ar=( "abc" "test" "xyz" )
for i in "${ar[@]}" # Prints nothing
do
  yq e 'keys | .[] | select(. == "$i")' .github/teams.yml 
done

for 循环中缺少输出的原因是什么?

用环境中设置的循环变量调用yq,在yq中使用env读取环境变量。另请参阅手册中的 Env Variable Operators 部分。

ar=( "abc" "test" "xyz" )
for i in "${ar[@]}" # Prints nothing
do
  i="$i" yq e 'keys | .[] | select(. == env(i))' .github/teams.yml 
done

另一种方法是从环境中导入(预格式化的)数组,然后在 yq 内进行数组减法(省去了循环和多次调用 yq):

ar='["abc","test","xyz"]' yq e 'env(ar) - (env(ar) - keys) | .[]' .github/teams.yml