如何使用 yq 选择键值对并将其格式化为“$key=$value”样式输出?

Kar*_*arl 4 bash jq yq

假设我有如下所示的 YAML 文件:

FOO: somefoo
BAR: somebar
Run Code Online (Sandbox Code Playgroud)

我想将其(使用yq)转换为以下内容,以便我可以将内容源到环境变量中:

export BAR='somebar'
export FOO='somefoo'
Run Code Online (Sandbox Code Playgroud)

我可以jq通过首先将输入转换为 JSON 来完成此操作,但我似乎不知道如何yq仅使用它。(我使用的是yq4.x,<4.18)。

那么,具体来说,我该如何使用 来执行以下操作yq

INPUT="FOO: somefoo
BAR: somebar"

echo "$INPUT" | yq e 'to_json' - | jq -r 'keys[] as $k | "export \($k)='\''\(.[$k])'\''"'
Run Code Online (Sandbox Code Playgroud)

pmf*_*pmf 5

您可以切换到 kislyuk 的yq,它在底层使用本机 jq。然后,您只需要to_entries访问键和值、字符串插值与标志相结合-r即可生成输出,并@sh转义以符合 shell 要求:

yq -r 'to_entries[] | "export \(.key)=\(.value | @sh)"'
Run Code Online (Sandbox Code Playgroud)
export FOO='somefoo'
export BAR='somebar'
Run Code Online (Sandbox Code Playgroud)