簡単に bash の 配列 を理解する

bash の配列を理解すると、シェルスクリプトの応用の幅が広がります。

bash の配列を使うのに必要な最低限の知識を、簡潔にまとめました。

bash 配列の使い方

配列の初期化

配列は、代入で自動生成されます。「=」の前後に空白をいれてはいけません。

インデックスを指定して代入します。

$ my_array1[0]="name1"
$ my_array1[2]="addr1"
$ my_array1[1]="tel1"

先頭からいっぺんに代入します。

$ my_array2=("name2" "tel2" "addr2")

配列のインデックスは、0から始まります。

配列の参照

配列に格納した値を参照するには、配列のインデックスを指定します。

${array[index]}

先頭データを参照する場合、インデックスに0を指定します。他のデータも、同様に、参照したい位置を指定します。

$ my_array2=("name2" "tel2" "addr2")

$ echo ${my_array2[0]}
name2

配列の削除

配列の値の削除、配列全体の削除には、unsetを使います。

要素を指定した場合は、個々の要素を削除します。

$ my_array2=("name2" "tel2" "addr2")

$ unset my_array2[1]

$ echo ${my_array2[@]}
name2 addr2

インデックスを指定しない場合は、配列全体を削除します。

$ unset my_array2

$ echo ${#my_array2[@]}
0 # 配列 my_array2 要素の個数

配列の要素の個数と要素の長さ

#は、長さです。

@は、配列の「全ての要素」を参照します。

つまり、配列に格納された要素数を調べるには、${#array[@]}となります。

$ my_array2=("name2" "tel2" "addr2")

$ echo ${#array[@]}
3

#は「長さ」なので、#array[index]要素を指定すると、要素の長さになります。

# 配列 my_array2 要素1の内容
$ echo ${my_array2[0]}
name2

# 配列 my_array2 要素1の長さ
$ echo ${#my_array2[0]}
5

配列の全体参照 「@」 「*」

@*は特別なインデックスです。配列の全ての要素を参照します。

ほとんど同じ働きをします。

$ echo ${#my_array2[@]}
4
$ echo ${#my_array2[*]}
4

しかし、「@」と「*」で違いが生じる場合があります。

配列の全体参照をダブルクォーテーションで囲んだ場合、[@]では1つずつのワードで分かれますが、[*]では全てが1つで管理されます。

「@」の場合、配列の要素が個別に扱われます。

my_array=("name" "tel" "addr")

for x in "${my_array[@]}"; do echo $x; done

name
tel
addr

「*」の場合、配列の要素が1つで扱われます。

my_array=("name" "tel" "addr")

for x in "${my_array[*]}"; do echo $x; done

name tel addr

配列と繰り返し処理

配列は、繰り返し処理で用いられることが多い(for, whileなど)です。

例では、forのカウンターをインデックスとして配列に格納する処理です。

declare -i COUNT=0

for x in $(ls *)
do
    if [ -x $x ]; then
	files[$COUNT]=$x #配列に格納
    fi
    COUNT=COUNT+1
done

配列を使う場合のバージョン

配列は、bash 2.0 以降の機能です。

古いバージョンを使っている場合は、最新版の利用を検討してみて下さい。

bashのバージョン確認

$ bash --version
bash --version
GNU bash, バージョン 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.

関連記事:シェルスクリプト bash 最新版の利用

bash 使いこなしのヒント

慣れてくると、「bash」で何でもやりたくなる。
でも、なんか、「使いこなしてる!」っていう実感もない・・・。

これは、そんなもやもやしたときに、ぴったりのbash本です。
幅広い話題についてふれる一方、意外と実用的な内容。脱初心者が目標です。

「bash」の本は、「コマンド辞典」以外にも1冊は持っておきたいもの。
かと言って、シェルスクリプトオンリーの本が欲しいわけでもなかったりする。
そんなときに読む、「bashが使えるようになる本」、それがコレ!

入門bash 第3版

コンピュータ関連は、どうしてもオライリー本を買ってしまいがちですが、これもよく読んだ本の1冊。今回の「配列」の説明はページ数こそ多くはいないけど、簡潔に書かれていて理解しやすいです。

アマゾンなら中古が安いです。



カテゴリー

今週よく読まれている記事

  1. 学会・会議で英語が絶望的にできなくて困るケース | オンライン開催で「英語力のなさ」を痛感した場合の対処法

    学会・会議で英語ができなくてに困るケース学会やイベント・会議などが、オンラインで開催される…
  2. r tidyverse 使い方 | 列 filter 絞り込み select関数 – dplyrパッケージ

    tidyverseで1つのデータフレームの列の絞り込みは、dplyrパッケージのselect関数を…
  3. プログラミングで疲れた脳をリフレッシュ 〜 鬼滅の刃「感動」と「やる気アップ」でストレス発散!

    ストレス発散は鬼滅で。「50%OFF」で読む!脳のパフォーマンスを上げるには、適度な休憩と…
  4. AWS ディスク容量不足 新しいボリュームを追加する

    バイオインフォマティクスでは大きなファイルを扱うことがあるので、ディスク不足に陥ることがあります。…
  5. 「知っている」と「知らない」とでは、もしものとき、大違いになる – コロナうつ対策

    コロナうつなどという言葉を聞くようになりましたが、派遣切り、解雇、リストラは、これから本格化します…

人気記事

  1. Excel, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  2. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  3. R言語

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…

おすすめ記事

  1. シェルスクリプト

    シェルスクリプト | ファイル存在チェック・空ファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  2. awk, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  3. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…