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}

알아채다확장 목록쉘이 실행됩니다 첫 번째그리고그 다음에Emit aws마지막 줄의 변수를 참조하지 않기 때문에 다음과 같은 영향을 받습니다.3.5.7 분사

aws를 시작하는 명령은 다음과 같습니다(명확성을 위해 각도 따옴표가 추가됨).

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

오류 메시지는 진실을 알려줍니다.

대신 이렇게 하세요:

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

중괄호는 따옴표를 대체할 수 없습니다.

관련 정보