我试图在循环中运行jq过滤器,从另一个文件中的列表中获取我匹配的键值。
while read line
do
jqfilter="jq '.Reservations[].Instances[] | select(contains({Tags: [{Key: "Name"}, {Value: "$line"}]}))' describe-instances.json"
eval "$jqfilter";
done < "./list"
循环正在运行,$line
正在替换为适当的值。
问题在于{Key: "Name"}
,eval会删除NAME周围的引号,因此jq过滤器不起作用。
答案 0 :(得分:1)
正如杰夫指出的那样,建议你在jq中做所有事情 可能,但即使一个循环无法避免,eval绝对可以而且可能应该是,效率和 避免并发症。
例如,我怀疑你可以写一下:
jq --arg line "$line" '
.Reservations[].Instances[]
| select(contains({Tags: [{Key: "Name"}, {Value: $line}]}))
' describe-instances.json
答案 1 :(得分:0)
谢谢你的高峰,一些小编辑和你的建议完美地运作
while read line
do
jq --arg line "$line" '.Reservations[].Instances[] | select(contains({Tags: [{Key: "Name"}, {Value: "line"}]}))' describe-instances.json;
done < "./instances-names"