如何使用jq与'select(startswith(“$ variable”))'?

时间:2017-12-22 10:23:58

标签: aws-cli jq

我正在使用'select(startswith("$variable") )'来解析来自AWS cli的一些输出。

我正在尝试使用itai@MacBook-Pro ~/src/Scripts - $ echo $App Analytics itai@MacBook-Pro ~/src/Scripts - $ aws cloudformation describe-stacks --stack-name $StackName --region $region | jq -r '.Stacks[].Outputs[].OutputKey | select(startswith("Analytics") )' AnalyticsAutoScalingGroup itai@MacBook-Pro ~/src/Scripts - $ aws cloudformation describe-stacks --stack-name $StackName --region $region | jq -r '.Stacks[].Outputs[].OutputKey | select(startswith("$App") )' itai@MacBook-Pro ~/src/Scripts - $ ,但由于某种原因它不起作用,即使我使用变量的值它也能正常工作。

示例:

aws cloudformation describe-stacks --stack-name $StackName --region $region | jq -r '.Stacks[].Outputs[].OutputKey' | grep $App

我知道我可以像这样使用grep:

amatch

但我更喜欢在命令中使用jq。

我做错了还是不可能?

2 个答案:

答案 0 :(得分:1)

通常,将shell变量的值传递给jq程序的最佳方法是使用-—arg和/或—-argjson命令行选项,如手册中所述。可以使用env传递环境变量。

另请参阅https://github.com/stedolan/jq/wiki/FAQ

答案 1 :(得分:1)

您也可以不使用--arg--argjson来执行此操作。在您的情况下,由于您的变量包含一个字符串值,因此您可以这样做。

aws cloudformation describe-stacks --stack-name $StackName --region $region |\
jq -r '.Stacks[].Outputs[].OutputKey | select(startswith('\"$App\"') )'

注意,我在变量中添加了单引号,并转义了双引号

https://github.com/stedolan/jq/wiki/FAQ上查看“ 如何将环境变量传递给jq程序?如何对jq程序进行参数设置?”第二个答案。