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



使用一个简单的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命令中解析为一个空字符串。我试过转义反刻度,交换' to '和无数其他颠簸编辑(是的,我在调用脚本时在cl上传递字符串:)

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

因为整个JMESPath表达式被括在单引号中,所以bash不会展开$fname变量。要解决这个问题,您可以用双引号将值括起来,然后对$fname变量使用单引号(原始字符串文字):

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]"

"是:aws: elasticloadbalancing: ap-southeast-2:1234567: targetgroup/xxx"

最新更新