如何使用-arg开关使用包含参数的jq解析aws-cli输出?

时间:2017-12-22 19:53:58

标签: jq aws-cli

我尝试使用AWS cli解析jq的输出,其中jq查询包含bash变量,并使用the --arg switch,如下所示:

$ aws ec2 describe-instances --region $region | jq --arg environment "$Environment" --arg br "$BUILD_NUMBER" --arg app "$App" -r '.Reservations[].Instances[].Tags[]?.Value | select(startswith("Company-$environment-$br-$app")

我在运行命令时得到一个新行。

这是我使用硬编码自动缩放组名称时的输出:

itai@Itais-MBP ~/Downloads -  $ aws ec2 describe-instances --region $region |   jq --arg environment "$Environment" --arg br "$BUILD_NUMBER" --arg app "$App"   -r '.Reservations[].Instances[].Tags[]?.Value | select(startswith("Company-Dev-60-Api") )'
Company-Dev-60-ApiServersASG-19L10K16RUXTE
Company-Dev-60-ApiServersASG-19L10K16RUXTE
itai@Itais-MBP ~/Downloads -  $

您可以看到变量的值已设置:

itai@Itais-MBP ~/Downloads -  $ echo $Environment
Dev
itai@Itais-MBP ~/Downloads -  $ echo $App
Api
itai@Itais-MBP ~/Downloads -  $ echo $BUILD_NUMBER
60

那么我做错了什么?

1 个答案:

答案 0 :(得分:2)

jq语言有自己的组合变量的方法。在jq中,你写的表达式是:

"Company-$environment-$br-$app"

只是一个香草JSON字符串。

一种选择是使用jq支持插值:

"Company-\($environment)-\($br)-\($app)"

另一种选择是使用jq的字符串连接运算符+

您也可以使用join("-")。等等。