curl 嵌套的Bash for循环未正确迭代?[duplicate]

db2dz4w8  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(135)

此问题在此处已有答案

bash script loop through two variables in lock step(2个答案)
9天前关闭。
我正在使用curl命令从应用程序中获取json数据
示例性 curl 响应

{
    "count": 2,
    "value": [
        {
            "id": 344,
            "name": "ip-172-20-94-68",
            "status": "offline",
       
        },
        {
            "id": 345,
            "name": "ip-172-20-95-119",
            "status": "offline",
        }
    ]
}

我的bash脚本

ipAddresses=$(curl -s -X GET "$hostUrl" -u :"$EncodedPAT" | jq -r ".value[] | select(.status==\"offline\").name")
 ids=$(curl -s -X GET "$hostUrl" -u :"$EncodedPAT" | jq -r ".value[] | select(.status==\"offline\").id")

        for ipAddress in "${ipAddresses[@]}"
            do
                for id in "${ids[@]}"
                    do
                    echo "ipAddress: ${ipAddress} id: ${id}"
                done
        done

输出功率

ipAddress: ip-172-20-94-68
ip-172-20-95-119
ip-172-20-95-113
ip-172-20-94-96
ip-172-20-94-86
id: 344
345
346
348
350

所以看起来它只迭代了最外层的循环一次,而没有迭代内层的循环(只使用第一个元素)。
预期产量

ipAddress: ip-172-20-94-68 id: 344
ipAddress: ip-172-20-95-119 id: 345
ipAddress: ip-172-20-95-113 id: 346
ipAddress: ip-172-20-94-96 id: 348
ipAddress: ip-172-20-94-86 id: 350

我在网上找过其他地方,但很难找到任何相关的东西。
有没有可能是哪里出了问题?

dtcbnfnu

dtcbnfnu1#

您可以将这些组合成一个jq调用:

.value[] | select(.status == "offline") | "ipAddress: \(.name) id: \(.id)"

提供:

"ipAddress: ip-172-20-94-68 id: 344"
"ipAddress: ip-172-20-95-119 id: 345"
Online JqPlay Demo(第一次)

相关问题