답변:
예 :
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
대 입문이 쉘 변수 또는 배열 인덱스 (배열 참조)에 값을 할당하는 컨텍스트에서 '+ ='연산자를 사용하여 변수의 이전 값을 추가하거나 추가 할 수 있습니다.
ARRAY
실제 변수 이름 바로 자리 표시 자입니다. 배열 인덱스가 순차적 이 아닌 경우에도 추가 +=
하면 가장 높은 인덱스 + 1에 할당됩니다.
${myarray[@]}
-스칼라 인 것처럼 배열 변수를 참조하는 것이 요소 0에 액세스하는 것과 동일합니다. 다른 말로 : $myarray
와 같습니다 ${myarray[0]}
.
마찬가지로 멍청한 녀석이 지적, 그것은 제로의 배열이 시작 여부를주의하는 것이 중요하고 순차적입니다. 연속적이지 않은 인덱스에 할당하고 설정을 해제 할 수 있기 때문에 ${#array[@]}
배열의 끝에서 항상 다음 항목이되는 것은 아닙니다.
$ array=(a b c d e f g h)
$ array[42]="i"
$ unset array[2]
$ unset array[3]
$ declare -p array # dump the array so we can see what it contains
declare -a array='([0]="a" [1]="b" [4]="e" [5]="f" [6]="g" [7]="h" [42]="i")'
$ echo ${#array[@]}
7
$ echo ${array[${#array[@]}]}
h
마지막 색인을 얻는 방법은 다음과 같습니다.
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
배열의 마지막 요소를 얻는 방법을 보여줍니다. 당신은 종종 이것을 볼 것입니다 :
$ echo ${array[${#array[@]} - 1]}
g
보시다시피, 희소 배열을 다루기 때문에 이것이 마지막 요소가 아닙니다. 이것은 희소 배열과 연속 배열 모두에서 작동합니다.
$ echo ${array[@]: -1}
i
${array[@]: start[:count]}
카운트 요소를 반환합니다. 또는 지정되지 않은 경우 나머지 모든 요소 . 다음 요소에서 시작 :-시작> = 0 인 경우 요소에서. 색인이> = start 인 경우 -시작 <0 인 경우 : 요소에서 인덱스가 (마지막 배열 인덱스 + 1) 인-abs (start); 주의 : abs (start)> (last array index + 1)이면 null 문자열이 반환됩니다. count가 지정되면 인덱스가 시작부터 연속적이지 않더라도 많은 요소가 리턴됩니다.
${array[-1]}
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
arr=("${arr[@]}" "new")
공백이있는 요소가있는 경우 사용
배열이 항상 순차적이고 0에서 시작하는 경우 다음을 수행 할 수 있습니다.
array[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
실수로 등호 사이에 공백을 사용하는 경우 :
array[${#array[@]}] = 'foo'
그러면 다음과 유사한 오류가 나타납니다.
array_name[3]: command not found
+=
구문 (@ e-t172의 답변 참조)은 (a) 더 간단하며 (b) 연속적이지 않거나 0으로 시작하지 않는 배열에도 사용할 수 있습니다.
+=
. 예 : 버전 2
$arr += ($el)
합니다. 문자열을 공백으로 나누고 각 요소를 추가하는 것처럼 보였습니다.