쉘 스크립트의 사전은 마지막 관련 항목만 표시합니다.

쉘 스크립트의 사전은 마지막 관련 항목만 표시합니다.

사전을 사용하려고 하는데 이상한 동작을 발견했습니다. 다음과 같은 사전을 만들 때:

declare -A servers
servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" )


echo "${servers["omega"]}"

첫 번째 요소가 아닌 마지막 요소 "prd"가 화면에 인쇄됩니다. 첫 번째 항목을 제외한 모든 항목을 제거하면 올바른 출력이 제공됩니다. 내가 본 모든 코드 예제는 위에서 설명한 대로 사전을 사용하기 때문에 내가 뭘 잘못하고 있는지 잘 모르겠습니다. 누구든지 내 실수를 알아챌 수 있나요?

인사

답변1

@Yurko의 의견이 정확하다고 생각합니다.

버전 4 이전의 bash의 경우(예: /bin/bashMac):

  1. declare -A줄은 오류( declare: -A: invalid option)를 발생시키고 배열은 다음과 같습니다.선언되지 않음.
  2. 두 번째 줄은색인배열: 인덱스는 산술 표현식으로 평가되기 때문입니다.
  3. Bash 산술 표현식에서 "기본" 단어는 변수 이름으로 처리됩니다. 설정되지 않은 변수에는 0 값이 할당됩니다.

따라서 각 문자열에는 index 가 할당됩니다 0.

이 시도:

declare -p servers

출력이 표시되어야 합니다.

declare -a servers='([0]="prd")'

관련 정보