带有 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"
使用简单的 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:
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"