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

JMESPath query expression with bash variable

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

#!/bin/bash

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

echo "$fname role: $role"

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

如何在 bash 脚本中正确地将变量传递给 JMESPath 查询?

因为整个 JMESPath 表达式都用单引号引起来,所以 bash 不会扩展 $fname 变量。要解决此问题,您可以用双引号将值括起来,然后对 $fname var:

使用单引号 (raw string literals)
aws lambda list-functions --query "Functions[?FunctionName == '$fname'].Role" --output text

将反引号换成单引号,对我不起作用...:(

但是转义反引号是可行的:)

这是我的输出:

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"