bash 变量扩展未按预期工作

bash 变量扩展未按预期工作

一切看起来正确,并将“echo”输出粘贴到 aws 命令中可以按预期工作。但是,当在命令行上使用变量时,aws 会抱怨未闭合的分隔符,即使存在(或至少似乎是)终止分隔符。

QF1="'DBInstances[*].[DBInstanceIdentifier, " 
QF2="SecondaryAvailabilityZone]'"

echo ${QF1}${QF2}
'DBInstances[*].[DBInstanceIdentifier, SecondaryAvailabilityZone]'

$ aws rds describe-db-instances \
    --query 'DBInstances[*].[DBInstanceIdentifier, SecondaryAvailabilityZone]' \
    --output=table
-------------------------------------------
|           DescribeDBInstances           |
+--------------------------+--------------+
|  copy-20210720           |  None        |
|  uis-clitst-rds-east-db1 |  None        |
|  uis-dev-rds-east-db1    |  None        |
|  uis-intst-rds-east-db1  |  us-east-1c  |
|  uis-prod-rds-east-db1   |  us-east-1b  |
+--------------------------+--------------+

aws rds describe-db-instances --query ${QF1}${QF2}

Bad value for --query 'DBInstances[*].[DBInstanceIdentifier,: Bad jmespath expression: Unclosed ' delimiter:
'DBInstances[*].[DBInstanceIdentifier,
^

答案1

QF1="'DBInstances[*].[DBInstanceIdentifier, " 
QF2="SecondaryAvailabilityZone]'"

# ...

aws rds describe-db-instances --query ${QF1}${QF2}

注意扩展列表shell 将执行 第一的然后发射aws因为你没有引用最后一行的变量,所以你会受到以下效果的影响3.5.7 分词

用于启动 aws 的命令将是(添加角引号以供说明)

aws rds describe-db-instances --query «'DBInstances[*].[DBInstanceIdentifier,» «SecondaryAvailabilityZone]'»
# ....................................^......................................^.^...........................^

错误消息告诉你真相。

改为这样做:

aws rds describe-db-instances --query "${QF1}${QF2}"
# ....................................^............^

大括号不能代替引号。

相关内容