[bash] Bash에서 색인을 지정하지 않고 배열에 새 요소 추가

$array[] = 'foo';bash에서 PHP와 비슷한 작업을 수행하는 방법이 있습니까?

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



답변

예 :

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

배쉬 참조 매뉴얼 :

대 입문이 쉘 변수 또는 배열 인덱스 (배열 참조)에 값을 할당하는 컨텍스트에서 ‘+ =’연산자를 사용하여 변수의 이전 값을 추가하거나 추가 할 수 있습니다.


답변

마찬가지로 멍청한 녀석이 지적, 그것은 제로의 배열이 시작 여부를주의하는 것이 중요하고 순차적입니다. 연속적이지 않은 인덱스에 할당하고 설정을 해제 할 수 있기 때문에 ${#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')


답변