我尝试使用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
那么我做错了什么?
答案 0 :(得分:2)
jq语言有自己的组合变量的方法。在jq中,你写的表达式是:
"Company-$environment-$br-$app"
只是一个香草JSON字符串。
一种选择是使用jq支持插值:
"Company-\($environment)-\($br)-\($app)"
另一种选择是使用jq的字符串连接运算符+
。
您也可以使用join("-")
。等等。