Bash

Bash數組沒有添加元素到最後

  • June 25, 2020
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 $arraybash.

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

引用自:https://unix.stackexchange.com/questions/594986