예시_1

예시_1

city예제_1에서 배열로 선언했는데 루프 에서 배열을 인쇄할 때 declare -A왜 먼저 출력되나요 ?Bangalorefor

Bangalore
Remote
Kolkata
Ahmedabad
Hyderabad
Pune
Mumbai
Delhi
Chennai

example_2에서는 숫자로 정렬되어 있다고 생각합니다.

예시_1

$ cat novice_3.sh 
#!/bin/bash/
declare -A  city=(  ["0"]="Mumbai" ["8"]="Delhi" ["16"]="Kolkata"
                    ["26"]="Bangalore" ["32"]="Chennai"  ["40"]="Pune" 
                    ["50"]="Hyderabad" ["56"]="Ahmedabad"  ["17"]="Remote" )
for i in ${!city[@]};do
echo "${city[$i]}"
done

$ sh novice_3.sh
Bangalore
Remote
Kolkata
Ahmedabad
Hyderabad
Pune
Mumbai
Delhi
Chennai

예시_2

$ cat novice_3.sh
#!/bin/bash/
declare   city=( ["0"]="Mumbai" ["8"]="Delhi" ["16"]="Kolkata"
                 ["26"]="Bangalore" ["32"]="Chennai"  ["40"]="Pune" 
                 ["50"]="Hyderabad" ["56"]="Ahmedabad"  ["17"]="Remote" )
for i in ${!city[@]};do
echo "${city[$i]}"
done

$ sh novice_3.sh
Mumbai
Delhi
Kolkata
Remote
Bangalore
Chennai
Pune
Hyderabad
Ahmedabad

답변1

Bash에서는 배열이 가능합니다.색인또는연관. 인덱스 배열은 숫자 인덱스를 가지며 (기본적으로) 인덱스의 숫자 순서대로 반복됩니다.

Bash의 연관 배열(a hash또는 ) hashed array은 모든 문자열을 인덱스(aka key)로 사용할 수 있습니다. 문자열은 숫자일 수 있습니다(또는 숫자로 나타나며 bash 스크립트에서는 거의 차이가 없음). 기타 유효한 문자열.

많은 언어와 마찬가지로 bash의 연관 배열은 순서가 없습니다. 예를 들어 키를 정렬하지 않고 배열을 반복하면 배열 요소가 반 무작위 순서로 표시됩니다.

기본적으로 bash의 배열은 인덱스 배열입니다. declare -a인덱스 배열을 명시적으로(소문자 사용) 선언 할 수 있습니다 a. d가 인덱싱되었는지 또는 기본적으로 인덱싱된 배열로 생성되었는지 에 관계없이 declare, 숫자가 아닌 인덱스로 배열 요소를 설정하려고 하면 인덱스는 항상 으로 평가되어 의 00번째 요소 값을 덮어쓰거나 생성합니다. 배열(있는 경우)

예를 들어

$ declare -a foo
$ foo[0]=5
$ foo[1]=2
$ declare -p foo
declare -a foo=([0]="5" [1]="2")

글쎄, 그게 당신이 기대하는 것입니다. 하지만 이제 다음과 같이 설정해 보세요 foo[bar].

$ foo[bar]=99
$ declare -p foo
declare -a foo=([0]="99" [1]="2")

마찬가지로 다음을 사용하여 배열을 선언할 수 있습니다 declare -A(참고수도 A). 이는 모든 인덱스가 숫자인 경우에도 배열 연관성을 강제합니다.

$ unset foo
$ declare -A foo
$ foo[0]=5
$ foo[1]=2
$ foo[bar]=99
$ declare -p foo
declare -A foo=([bar]="99" [0]="5" [1]="2" )

따라서 귀하의 질문에 대한 대답은 example_1에서 city자신을 다음과 같이 선언한다는 것입니다.연관대량으로. example_2에는 하나도 없으므로 기본적으로색인대량으로.

관련 정보