Bash 배열은 끝에 요소를 추가하지 않습니다.

Bash 배열은 끝에 요소를 추가하지 않습니다.
root@kali-linux:~/Softwares/Softwares/Tools/dirsearch# array=()
root@kali-linux:~/Softwares/Softwares/Tools/dirsearch# for i in 1 2 3 4
> do
> array+=($i)
> done
root@kali-linux:~/Softwares/Softwares/Tools/dirsearch# echo $array
1
root@kali-linux:~/Softwares/Softwares/Tools/dirsearch# for i in 1 2 3 4; do array+=( $i ); done
root@kali-linux:~/Softwares/Softwares/Tools/dirsearch# echo $array
1
root@kali-linux:~/Softwares/Softwares/Tools/dirsearch# for i in 1 2 3 4; do array+=( $i ); done
root@kali-linux:~/Softwares/Softwares/Tools/dirsearch# for i in 1 2 3 4; do
> array=( "${array[@]}" "$i" )
> done
root@kali-linux:~/Softwares/Softwares/Tools/dirsearch# echo $array
1
root@kali-linux:~/Softwares/Softwares/Tools/dirsearch# 

Bash에서 배열에 요소를 추가/제거하는 방법은 무엇입니까?이 질문에서 말한 대로 추가해 보았지만 여전히 작동하지 않고 1이 인쇄됩니다.

답변1

귀하의 루프는 괜찮습니다 (인용을 잊은 것을 제외하고 $i). 문제는 에 있으며 echo $array배열의 모든 요소를 ​​​​인쇄하지 않습니다 bash.

bash, , , ... ksh대신 어색한 배열 디자인을 복사했습니다 .zshcshtcshrc

ksh에서 $arrayis의 약어는 ${array[0]}인덱스 0에 있는 요소의 내용으로 확장되거나 설정되지 않은 경우 빈 문자열로 확장됩니다.

배열의 모든 요소로 확장하려면 다음이 필요합니다.

$ printf ' - "%s"\n' "${array[@]}"
 - "1"
 - "2"
 - "3"
 - "4"

배열의 첫 번째 요소의 경우(ksh/bash 배열이 드물기 때문에 인덱스 0의 요소가 아닐 수 있음):

$ printf '%s\n' "${array[@]:0:1}"
1

인덱스 0에 있는 요소의 경우(귀하의 예에서는 첫 번째 요소와 동일함):

$ printf '%s\n' "$array"
1

또는:

$ printf '%s\n' "${array[0]}"
1

변수 정의를 인쇄하려면 다음을 사용할 수도 있습니다 typeset -p.

ksh93u+$ typeset -p array
typeset -a array=( 1 2 3 4 )
bash-5.0$ typeset -p array
declare -a array=([0]="1" [1]="2" [2]="3" [3]="4")
bash-5.0$ unset 'array[0]'
bash-5.0$ typeset -p array
declare -a array=([1]="2" [2]="3" [3]="4")
bash-5.0$ printf '%s\n' "$array"

bash-5.0$ printf '%s\n' "${array[@]:0:1}"
2

관련 정보