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
대신 어색한 배열 디자인을 복사했습니다 .zsh
csh
tcsh
rc
ksh에서 $array
is의 약어는 ${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