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

时间:2015-10-14 16:54:14

标签: bash aws-cli 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命令中的空字符串。我已经尝试逃避后面的滴答声,交换`到'和其他颠簸编辑的镜像(是的,我在调用脚本时在cl上传递一个字符串:)

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

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:3)

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

但是逃避反引号有效:)

以下是我的输出:

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-东南-2:1234567:targetgroup / XXX"