bash/shell jq从aws json解析为变量

cfi*_*coo -2 bash shell json amazon-web-services jq

我试图从aws结果解析json结果,但是当我使用$ ip时,我得到错误或null,当我使用特定的IP时它工作.当我在jq命令中使用tne变量时出错了

#!/bin/bash

aws ec2 describe-addresses --region eu-west-1 > 1.txt
ipList=( "52.16.121.238" "52.17.250.188" )

for ip in "${ipList[@]}";
do
    echo $ip
    cat 1.txt | jq '.Addresses | .[] | select (.PublicIp==$ip) |    .InstanceId'
    #echo $result
done
Run Code Online (Sandbox Code Playgroud)

请指教.

小智 5

你在jq程序周围使用单引号,这导致shell变量不被插值.此外,即使它是,你仍然需要在变量插值周围添加字符串引用,以使jq将其解释为字符串文字.由于对jq程序进行shell变量插值很难且容易出错,因此jq为此效果提供了命令行参数--arg,旨在将shell变量提升为jq变量.因此,您的jq调用将如下所示:

jq --arg ip "$ip" '.Addresses[] | select(.PublicIp == $ip) | .InstanceId'