一切看起来正确,并将“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}"
# ....................................^............^
大括号不能代替引号。