'array=X'는 항상 bash의 첫 번째 요소에 할당됩니까?

'array=X'는 항상 bash의 첫 번째 요소에 할당됩니까?

'array=X'는 항상 bash의 첫 번째 요소에 할당됩니까? 그렇지 않다면 man bash 페이지의 다음 텍스트를 이해하기 위해 "예"가 필요할 수도 있습니다.

인덱스 배열에 할당할 때 선택적 괄호와 아래 첨자가 제공되면 해당 인덱스가 할당됩니다. 그렇지 않으면 할당된 요소의 인덱스는 명령문에 의해 할당된 마지막 인덱스에 1을 더한 것입니다.

제발.

답변1

array와 같고 array[0], 와 $array같습니다 ${array[0]}. Bash에서는 실제로 배열이 0아니더라도 array참조용 인덱스를 사용하는 것이 유효합니다 . 그러나 인덱스(0 또는 0이 아님)를 사용하여 할당하면 변수가 배열로 변환됩니다.

$ array=foo
$ declare -p array         
declare -- array="foo"          # it's not an array
$ echo "${array[0]}"            # we can get the value through index 0
foo
$ declare -p array
declare -- array="foo"          # it's still not an array

$ array[1]=bar
$ declare -p array
declare -a array=([0]="foo" [1]="bar")  # now it is
$ echo $array                           # though this still works..
foo

매뉴얼 페이지의 일부/수동인용하신 전문은 다음과 같습니다.

배열은 형식의 복합 할당을 사용하여 할당됩니다 name=(value1 ... valuen). 여기서 각 값은 형식입니다 [subscript]=string. 인덱스 배열 할당에는 문자열만 필요합니다. 인덱스 배열에 할당할 때 선택적 괄호와 아래 첨자가 제공되면 해당 인덱스가 할당됩니다. 그렇지 않으면 할당된 요소의 인덱스는 명령문에 의해 할당된 마지막 인덱스에 1을 더한 것입니다. 인덱싱은 0부터 시작됩니다.

이는 다음과 같은 과제를 나타냅니다.

array=(foo bar)
array=([0]=foo [1]=bar)

위 둘은 인덱싱이 0부터 시작하고 (아래) 인덱싱되지 않은 값을 연속된 인덱스에 넣기 때문에 동일합니다. 마찬가지로 다음 두 할당은 동일합니다.

array=([123]=foo [124]=bar)
array=([123]=foo bar)

몇 단락 뒤에는 인덱스 0과 인덱스되지 않은 참조의 동일성이 명시적으로 언급됩니다.

아래 첨자 없이 배열 변수를 참조하는 것은 아래 첨자로 배열을 참조하는 것과 동일합니다 0. 유효한 첨자를 사용한 변수에 대한 참조는 모두 유효하며, 필요한 경우 bash는 배열을 생성합니다.

관련 정보