city
예제_1에서 배열로 선언했는데 루프 에서 배열을 인쇄할 때 declare -A
왜 먼저 출력되나요 ?Bangalore
for
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
, 숫자가 아닌 인덱스로 배열 요소를 설정하려고 하면 인덱스는 항상 으로 평가되어 의 0
0번째 요소 값을 덮어쓰거나 생성합니다. 배열(있는 경우)
예를 들어
$ 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에는 하나도 없으므로 기본적으로색인대량으로.