나는 Bash에서 연관 배열을 가지고 놀았고, 정확히 동일한 선언을 가진 연관 배열을 사용할 때와 사용하지 않을 때 다음과 같은 차이점을 발견했습니다 declare
. 코드는 아래와 같이 표시됩니다.
#!/usr/bin/env bash
echo -e "\n\nASSOCIATIVE ARRAY\n"
declare -A MY_MAP=(
[Madrid]="Spanish"
[London]="English"
[Paris]="French"
[1]=2
[3]=3.14
)
echo "First element: $MY_MAP"
echo "Whole content as single string: ${MY_MAP[*]}"
echo "Whole content quoted separately: ${MY_MAP[@]}"
echo "List of indices: ${!MY_MAP[@]}"
echo "Array length: ${#MY_MAP[*]}"
echo "Array length: ${#MY_MAP[@]}"
echo "Second element: ${MY_MAP[London]}"
echo "Last 2 elements: ${MY_MAP[@]:1:3}"
echo -e "\n\nASSOCIATIVE ARRAY - 2\n"
MY_MAP2=(
[Madrid]="Spanish"
[London]="English"
[Paris]="French"
[1]=2
[3]=3.14
)
echo "First element: $MY_MAP2"
echo "Whole content as single string: ${MY_MAP2[*]}"
echo "Whole content quoted separately: ${MY_MAP2[@]}"
echo "List of indices: ${!MY_MAP2[@]}"
echo "Array length: ${#MY_MAP2[*]}"
echo "Array length: ${#MY_MAP2[@]}"
echo "Second element: ${MY_MAP2[London]}"
echo "Last 2 elements: ${MY_MAP2[@]:1:3}"
이전 스크립트를 실행하면 다음과 같은 결과가 나타납니다.
ASSOCIATIVE ARRAY
First element:
Whole content as single string: French 3.14 2 English Spanish
Whole content quoted separately: French 3.14 2 English Spanish
List of indices: Paris 3 1 London Madrid
Array length: 5
Array length: 5
Second element: English
Last 2 elements: French 3.14 2
ASSOCIATIVE ARRAY - 2
First element: French
Whole content as single string: French 2 3.14
Whole content quoted separately: French 2 3.14
List of indices: 0 1 3
Array length: 3
Array length: 3
Second element: French
Last 2 elements: 2 3.14
내 질문은 declare -A
출력을 다르게 만들려면 어떻게 해야 합니까?
여기서 무슨 일이 일어나고 있는지 자세히 알아주시면 감사하겠습니다.
미리 감사드립니다.
답변1
declare -A
첫 번째 선언이 연관 배열로 간주되는 유일한 이유입니다. 두 번째 선언은 인덱스 배열로 처리됩니다. 인덱스 배열에서 작업할 때 인덱스는 산술 컨텍스트로 처리됩니다: Madrid
, London
및 는 Paris
변수 이름으로 해석되며 선언되지 않았으므로 해당 값은 0입니다. 따라서 할당은 [0]="Spanish"
, [0]="English"
, [0]="French"
, [1]=2
및 yes [3]=3.14
로 읽습니다 .${MY_MAP2[London]}
${MY_MAP2[0]}