我正在使用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