저는 "Bash Pocket Reference"책을 살펴 보았고 연관 배열에 대한 섹션에 도달했습니다. 이제 책의 예제 코드를 시도하면 예상치 못한 대답이 나옵니다.
istanev@inspiron5559:~$ data=([joe]=30 [mary]=25)
istanev@inspiron5559:~$ echo ${data[joe]}
25
istanev@inspiron5559:~$ echo ${data[mary]}
25
data [joe]가 30을 반환해야하지 않나요? 대신 25를 반환하는 이유는 무엇입니까? 내 bash 버전은 4.3.46 (1) 릴리스입니다.
기본적으로 bash는 배열을 인덱스 배열로 처리합니다.
이러한 경우 인덱스는 산술 표현식으로 평가됩니다.
$ joe=3 mary=6
$ unset data
$ data=([joe]=111 [mary]=bbb)
$ declare -p data
declare -a data=([3]="111" [6]="bbb")
출력은 몇 가지 사항을 보여줍니다.
-a
출력에서.joe
및 의 숫자 값과 일치합니다 mary
.색인이 인용 된 경우에도 마찬가지입니다 (작은 따옴표 포함).
$ joe=3 mary=6
$ unset data
$ data=(["joe"]=111 ["mary"]=bbb)
$ declare -p data
declare -a data=([3]="111" [6]="bbb")
인덱스로 사용되는 문자열이 숫자를 포함하도록 정의되지 않은 경우 값이 0 인 산술 표현식으로 평가됩니다.
$ unset joe ; unset mary ; unset data
$ data=([joe]=111 [mary]=bbb)
$ declare -p data
declare -a data=([0]="bbb")
무슨 일이 있었는지에 대한 [joe]=111
평가 [0]=111
, 인덱스의 배열 0
을 111
. 그러나 다음으로 [mary]=bbb
평가되어 [0]=bbb
인덱스의 배열 값 0
을 bbb
.
실제로 연관 배열을 가지려면 사용하기 전에 그렇게 정의해야합니다.
데이터가 포함되어있는 동안에는 변경할 수 없습니다. 위와 같이 설정된 어레이 :
$ declare -A data
bash: declare: data: cannot convert indexed to associative array
그러나이를 지우면 다음을 수행 할 수 있습니다.
$ joe=3 ; mary=6 ; unset data
$ declare -A data
$ data=([joe]=111 [mary]=bbb)
$ declare -p data
declare -A data=([joe]="111" [mary]="bbb" )
보시다시피 인덱스로 사용되는 문자열이 유효한 변수 이름이고 값이 포함되어 있는지는 중요하지 않습니다. 연관 배열의 문자열 인덱스로 사용됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다