Aws cli 如何将jq与“select(startswith(“$variable”)”一起使用?

Aws cli 如何将jq与“select(startswith(“$variable”)”一起使用?,aws-cli,jq,Aws Cli,Jq,我正在使用jq解析来自awscli的一些输出 我尝试使用'selectstartswith$variable',但由于某些原因,即使使用变量的值,它也无法正常工作 例如: itai@MacBook-Pro ~/src/Scripts - $ echo $App Analytics itai@MacBook-Pro ~/src/Scripts - $ aws cloudformation describe-stacks --stack-name $StackName --region $regio

我正在使用jq解析来自awscli的一些输出

我尝试使用'selectstartswith$variable',但由于某些原因,即使使用变量的值,它也无法正常工作

例如:

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 - $
我知道我可以像这样使用grep:

aws cloudformation describe-stacks --stack-name $StackName --region $region | jq -r '.Stacks[].Outputs[].OutputKey' | grep $App
但是我更喜欢在整个命令中使用jq


我是做错了还是根本不可能?

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


另请参见

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

aws cloudformation describe-stacks --stack-name $StackName --region $region |\
jq -r '.Stacks[].Outputs[].OutputKey | select(startswith('\"$App\"') )'
注意,我添加了单引号,并在变量周围转义了双引号

请参阅此处的“如何将环境变量传递给jq程序”?jq程序如何参数化?第二个答案