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}

気づく拡張リストシェルが実行されます 最初そしてそれからEmitaws最後の行の変数を参照しないため、次のような影響を受けます。3.5.7 噴射

awsを起動するコマンドは次のとおりです(明確にするために角度引用符が追加されています)。

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

エラーメッセージは真実を伝えます。

代わりにこれを行う:

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

中括弧は引用符を置き換えることはできません。

おすすめ記事