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
您的循環很好(除了您忘記引用
$i
),問題出在您echo $array
的bash
.
bash
複製了尷尬的數組設計,ksh
而不是zsh
,csh
,tcsh
,rc
…在 ksh 中,
$array
是${array[0]}
(擴展為索引 0 元素的內容,如果未設置,則擴展為空字元串)。要擴展到數組的所有元素,您需要:
$ printf ' - "%s"\n' "${array[@]}" - "1" - "2" - "3" - "4"
對於數組的第一個元素(可能不是索引為 0 的元素,因為 ksh/bash 數組是稀疏的):
$ 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