如何将 jq 与 'select(startswith( "$variable" ))' 一起使用?



我正在使用jq来解析AWS CLI的一些输出。

我正在尝试使用'select(startswith("$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。

我做错了吗?还是不可能?

您也可以在不使用--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程序?第二个答案。

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

另请参见https://github.com/stedolan/jq/wiki/faq

最新更新