我正在使用'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。
我做错了还是不可能?
答案 0 :(得分:1)
通常,将shell变量的值传递给jq程序的最佳方法是使用-—arg
和/或—-argjson
命令行选项,如手册中所述。可以使用env
传递环境变量。
答案 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程序进行参数设置?”第二个答案。