![쉘 스크립트의 사전은 마지막 관련 항목만 표시합니다.](https://linux55.com/image/166691/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20%EC%82%AC%EC%A0%84%EC%9D%80%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EA%B4%80%EB%A0%A8%20%ED%95%AD%EB%AA%A9%EB%A7%8C%20%ED%91%9C%EC%8B%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
사전을 사용하려고 하는데 이상한 동작을 발견했습니다. 다음과 같은 사전을 만들 때:
declare -A servers
servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" )
echo "${servers["omega"]}"
첫 번째 요소가 아닌 마지막 요소 "prd"가 화면에 인쇄됩니다. 첫 번째 항목을 제외한 모든 항목을 제거하면 올바른 출력이 제공됩니다. 내가 본 모든 코드 예제는 위에서 설명한 대로 사전을 사용하기 때문에 내가 뭘 잘못하고 있는지 잘 모르겠습니다. 누구든지 내 실수를 알아챌 수 있나요?
인사
답변1
@Yurko의 의견이 정확하다고 생각합니다.
버전 4 이전의 bash의 경우(예: /bin/bash
Mac):
- 이
declare -A
줄은 오류(declare: -A: invalid option
)를 발생시키고 배열은 다음과 같습니다.선언되지 않음. - 두 번째 줄은색인배열: 인덱스는 산술 표현식으로 평가되기 때문입니다.
- Bash 산술 표현식에서 "기본" 단어는 변수 이름으로 처리됩니다. 설정되지 않은 변수에는 0 값이 할당됩니다.
따라서 각 문자열에는 index 가 할당됩니다 0
.
이 시도:
declare -p servers
출력이 표시되어야 합니다.
declare -a servers='([0]="prd")'