programing

Bash에서 인덱스를 지정하지 않고 어레이에 새 요소 추가

minxs 2023. 4. 11. 22:33
반응형

Bash에서 인덱스를 지정하지 않고 어레이에 새 요소 추가

PHP와 같은 것을 할 수 있는 방법이 있나요?$array[] = 'foo';bash vs doing :

array[0]='foo'
array[1]='bar'

네, 있습니다.

ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')

Bash 레퍼런스 매뉴얼:

할당 문이 셸 변수 또는 배열 인덱스에 값을 할당하는 컨텍스트에서 '+=' 연산자를 사용하여 변수의 이전 값에 추가하거나 추가할 수 있습니다.

기타:

복합 할당을 사용하여 어레이 변수에 +=를 적용하면(아래 어레이 참조), 변수 값은 설정 해제되지 않고(= 사용 시), 어레이의 최대 인덱스보다 큰 값(인덱스 어레이의 경우)부터 어레이에 새 값이 추가됩니다.

Dumb Guy가 지적했듯이 어레이가 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
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest

어레이가 항상 시퀀셜이고 0에서 시작하는 경우 다음을 수행할 수 있습니다.

array[${#array[@]}]='foo'

# gets the length of the array
${#array_name[@]}

등호 사이에 실수로 공백을 사용한 경우:

array[${#array[@]}] = 'foo'

그러면 다음과 같은 오류가 표시됩니다.

array_name[3]: command not found

인덱스 어레이를 사용하면 다음과 같은 작업을 수행할 수 있습니다.

declare -a a=()
a+=('foo' 'bar')

언급URL : https://stackoverflow.com/questions/1951506/add-a-new-element-to-an-array-without-specifying-the-index-in-bash

반응형