'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는 배열을 생성합니다.