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

おすすめ記事