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