【问题标题】:JMESPath query expression with bash variable带有 bash 变量的 JMESPath 查询表达式
【发布时间】:2016-01-12 21:23:59
【问题描述】:

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

【问题讨论】:

    标签: bash aws-cli jmespath


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      这是我的输出:

      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”

      【讨论】:

      • 那是因为原始引号(单引号)总是创建字符串,如果Listeners[].Port 是一个数字,那么字符串将不匹配。也就是说,'1234' 真的是 `"1234"` 的缩写。
      猜你喜欢
      • 1970-01-01
      • 2021-01-09
      • 2023-03-20
      • 2015-10-27
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多