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

时间:2015-06-28 19:13:17

标签: json bash shell 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

请告知。

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:-1)

感谢您的帮助。正确的格式是:

cat 1.txt | jq ".Addresses | .[] | select(.PublicIp==\"$ip\") | .InstanceId"