사전을 사용하려고하는데 이상한 동작을 발견했습니다. 다음과 같은 사전을 만들 때 :
declare -A servers servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" ) echo "${servers["omega"]}"
마지막 요소 “prd” 첫 번째가 아닌 화면에 인쇄됩니다. 첫 번째 항목을 제외한 모든 항목을 삭제하면 올바른 출력이 생성됩니다. 내가 살펴본 모든 코드 예제가 위와 같은 사전을 사용하고 있기 때문에 내가 뭘 잘못하고 있는지 잘 모르겠습니다. 누가 내 실수를 발견 할 수 있나요?
인사말
댓글
답변
@Yurko “의 의견이 올바른 방향이라고 생각합니다.
버전 4 이전의 bash (예 : Mac의 경우 /bin/bash
) :
-
declare -A
줄에서 오류 (declare: -A: invalid option
)가 발생하고 배열은 선언되지 않음 . - 두 번째 줄은 인덱싱 된 배열을 생성합니다. 인덱스는 산술 표현식으로 평가되기 때문입니다.
- bash 산술 표현식에서 : “베어”단어는 변수의 이름으로 처리되고 설정되지 않은 변수에는 0 값이 주어집니다.
따라서 각 문자열은 색인 0
.
해보기 :
declare -p servers
출력이 표시되어야합니다.
declare -a servers="([0]="prd")"
servers
가 연관 배열이 아닌 배열 인 것처럼 작동합니다. 오타를 확인하고 bash 버전이 4.0 이상인지 확인합니다 (연관 배열을 지원하는 첫 번째 버전).