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
'programing' 카테고리의 다른 글
| .text, .value 및 .value2의 차이점은 무엇입니까? (0) | 2023.04.11 |
|---|---|
| SQL Server의 조건부 WHERE 절 (0) | 2023.04.11 |
| index match는 공백 셀에 대해 0을 반환합니다. "-"로 해야 합니다. (0) | 2023.04.11 |
| PowerShell: 단일 명령어 환경 변수 설정 (0) | 2023.04.11 |
| 행이 있는지 확인하고, 그렇지 않으면 삽입 (0) | 2023.04.06 |