16

使用简单的 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 查询?

4

2 回答 2

29

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

aws lambda list-functions --query "Functions[?FunctionName == '$fname'].Role" --output text
于 2015-10-14T21:20:59.320 回答
8

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

但是逃避反引号是可行的:)

这是我的输出:

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”

于 2017-03-17T04:08:28.887 回答