gpt4 book ai didi

bash - 使用 jq 分配多个输出变量

转载 作者:行者123 更新时间:2023-11-29 08:57:32 25 4
gpt4 key购买 nike

我正在尝试使用 jq 来解析来自 TVDB api 的信息.我需要提取几个字段并将值分配给我可以在我的 bash 脚本中继续使用的变量。我知道我可以通过 bash 使用 variable="$(command)" 轻松地将输出分配给一个变量,但我需要输出来产生多个变量,我不想使用多个命令.

我阅读了这份文档:

https://stedolan.github.io/jq/manual/v1.5/#Advancedfeatures

但我不知道这是否与我正在尝试做的相关。

jq '.data' 产生以下输出:

[
{
"absoluteNumber": 51,
"airedEpisodeNumber": 6,
"airedSeason": 4,
"airedSeasonID": 680431,
"dvdEpisodeNumber": 6,
"dvdSeason": 4,
"episodeName": "We Will Rise",
"firstAired": "2017-03-15",
"id": 5939660,
"language": {
"episodeName": "en",
"overview": "en"
},
"lastUpdated": 1490769062,
"overview": "Clarke and Roan must work together in hostile territory in order to deliver an invaluable asset to Abby and her team."
}
]

我试过 jq '.data | {episodeName:$name}'jq '.data | .episodeName as $name' 只是为了尝试让一个工作。我不理解文档,即使它是我正在寻找的。有没有办法做我想做的事?

最佳答案

您可以将单独的变量与 read 一起使用:

read var1 var2 var3 < <(echo $(curl -s 'https://api.github.com/repos/torvalds/linux' | 
jq -r '.id, .name, .full_name'))

echo "id : $var1"
echo "name : $var2"
echo "full_name : $var3"

使用数组:

read -a arr < <(echo $(curl -s 'https://api.github.com/repos/torvalds/linux' | 
jq -r '.id, .name, .full_name'))

echo "id : ${arr[0]}"
echo "name : ${arr[1]}"
echo "full_name : ${arr[2]}"

你也可以拆分输出一些字符:

IFS='|' read var1 var2 var3 var4 < <(curl '......' | jq -r '.data | 
map([.absoluteNumber, .airedEpisodeNumber, .episodeName, .overview] |
join("|")) | join("\n")')

或者使用像这样的数组:

set -f; IFS='|' data=($(curl '......' | jq -r '.data | 
map([.absoluteNumber, .airedEpisodeNumber, .episodeName, .overview] |
join("|")) | join("\n")')); set +f

absoluteNumber, airedEpisodeNumber, episodeName & overview 分别是${data[0]} ${data[1]}${data[2]}${data[3]}set -fset +f 分别用于禁用和启用globbing .

对于部分,所有必填字段都被映射并用 '|' 字符和 join("|")

分隔

如果您使用的是 jq < 1.5,则必须使用 tostring 为每个数字字段将数字转换为字符串,例如:

IFS='|' read var1 var2 var3 var4 < <(curl '......' | jq -r '.data | 
map([.absoluteNumber|tostring, .airedEpisodeNumber|tostring, .episodeName, .overview] |
join("|")) | join("\n")')

关于bash - 使用 jq 分配多个输出变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43291389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com