Bash에서 이 두 연관 배열 선언의 차이점은 무엇입니까?

Bash에서 이 두 연관 배열 선언의 차이점은 무엇입니까?

나는 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]}

관련 정보