シェルスクリプトの入門編5:配列について

配列

宣言の仕方は{変数名}=({要素1} {要素2} {要素3})のように書きます。要素間の間は半角スペースを入れます。

個別要素の表示

配列の各要素は${変数名[インデックス番号]}で格納されているので以下のようにして出力できます。

{}で挟まなければ$変数名インデックス番号]という文字列を付け加えた結果として扱ってしまうため、必ず囲むようにします。

配列要素のインデックスについて

配列のインデックス番号は0からスタートします。

要素のインデックスの途中を省いて宣言することもできます。

配列一覧の表示

配列の全要素は${変数名[@]}で出力することができます。

また、各要素のインデックス番号の出力は${!変数名[@]}で可能です。

配列要素の追加

インデックス番号を指定して要素を追加する場合は変数名[インデックス番号]=要素で追加できます。

また、末尾に追加する場合は変数名+=(要素)の形式で可能です。

スペース区切りで複数要素を追加できます。

配列要素の更新

すでに要素が登録されているインデックス番号を指定して上書きすることで要素の更新ができます。

配列要素の削除

unset 変数名[インデックス番号]で配列の要素の削除が可能です。

また、削除されたインデックスはそのままですので注意です。

配列のコピー

配列のコピーは以下の形式でできます。

コピー先変数=("${コピー元変数[@]}")

少しややこしいのですが、

最初の()は冒頭の配列の宣言の通り全体を小括弧で囲んでいて、内部の"${変数名[@]}"は配列一覧表示の部分で、両方を組み合わせています。

ここで生成した新しい配列はインデックスに空きがあっても詰めてた状態になっているという点がポイントです。

 

まとめ

  • 配列の宣言の仕方は変数名=(要素1 要素2 要素3)の形式(要素間はスペースで)
  • 追加はインデックスを指定するか変数名+=(要素1)のように末尾に追加できる
  • 更新はインデックス番号を指定して上書きするだけ
  • 削除はunset 変数名[インデックス番号]、削除されたインデックスは空のママである
  • 配列のコピーはコピー先=("${コピー元[@]}")で可能、コピー元の開いたインデックスは詰められる

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です