我正在尝试从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
请告知。
答案 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"