個人的勉強メモ置き場

プログラミングど素人のメモ置き場

bash 配列 メモ

bashにおいても一般的なプログラミング言語同様に配列が使用できる

配列へ値を代入するには( )内に要素を並べる(複合代入)

# 空の配列を作成
$ list=()
# 複合代入で作成
$ fruits=(apple grape orange peach)

明示的に配列と宣言するときはdeclare -aを使う

$ declare -a array

${配列名[インデックス]}で要素の参照が出来る

$ fruits=(apple grape orange peach)
$ echo ${fruits[0]}
apple
$ echo ${fruits[2]}
orange

既存の配列の内容を変更するには配列名[インデックス]=値で変更できる

$ fruits=(apple grape orange peach)
$ fruits[1]=banana
$ echo ${fruits[1]}
banana

配列の要素数を取得するには${#配列名[@]}とする。また、全ての要素を取得するにはインデックスに*または@を指定する

$ fruits=(apple grape orange peach)
$ echo ${#fruits[@]}
4
$ echo ${fruits[@]}
apple grape orange peach

" "で囲むと展開される
"${配列名[@]}"の場合は各要素が個々の文字列として展開されるため配列のコピーなどに使える
"${配列名[*]}"の場合はスペースで連結した1つの文字列として展開される

要素の追加には前述の"${配列名[@]}"を用いる。末尾に追加する場合には+=でも可能

$ foods=(egg fish "${fruits[@]}")
$ echo ${foods[@]}
egg fish apple grape orange peach
$ foods+=(tofu)
$ echo ${foods[@]}
egg fish apple grape orange peach tofu

要素の削除にはunsetコマンドを使う。削除された箇所は未設定となる

unset fruits[2]
$ echo ${fruits[@]}
apple grape peach

値の存在するインデックスを取得するには配列名の前に!をつける

$ countries=([0]=Japan [2]=Franch [3]=Germany)
$ echo ${!countries[@]}
0 2 3