带有 bash 变量的 JMESPath 查询表达式

问题描述 投票:0回答:3

使用简单的 aws cli 查询来检查 Lambda 函数是否存在,并回显相关角色(如果存在):

#!/bin/bash

fname=$1
role=$(aws lambda list-functions --query 'Functions[?FunctionName == `$fname`].Role' --output text)

echo "$fname role: $role"

但是,$fname 在 aws 命令中似乎解析为空字符串。我尝试过转义后面的勾号,将 ` 交换为 ' 以及无数其他的颠簸编辑(是的,我在调用脚本时在 cl 上传递了一个字符串:)

如何正确地将变量传递到 bash 脚本内的 JMESPath 查询中?

bash aws-cli jmespath
3个回答
35
投票

由于整个 JMESPath 表达式用单引号引起来,bash 不会扩展

$fname
变量。要解决此问题,您可以用双引号将该值引起来,然后使用单引号(原始字符串文字)表示
$fname
var:

aws lambda list-functions --query "Functions[?FunctionName == '$fname'].Role" --output text

11
投票

将反引号替换为单引号,对我来说不起作用......:(

但是转义反引号是有效的:)

这是我的输出:

aws elbv2 describe-listeners --load-balancer-arn $ELB_ARN --query "Listeners[?Port == '$PORT'].DefaultActions[].TargetGroupArn | [0]"

aws elbv2 describe-listeners --load-balancer-arn $ELB_ARN --query "Listeners[?Port == \`$PORT\`].DefaultActions[].TargetGroupArn | [0]"

“arn:aws:elasticloadbalancing:ap-southeast-2:1234567:targetgroup/xxx”


0
投票

7年后,同样的问题。 我终于通过尝试一些愚蠢的语法弄清楚了。

找到了对我有用的一个:只需在反引号之间添加简单的引号...(是的,这很愚蠢)

` #!/bin/bash

fname=$1 角色=$(aws lambda list-functions --query 'Functions[?FunctionName ==

'$fname'
].Role' --输出文本)

echo "$fname 角色: $role" ` 你在这里!

© www.soinside.com 2019 - 2024. All rights reserved.