bash 配列の使い方|サンプルでわかる最低限の知識

bash 配列の使い方について、初期化・参照・削除のやり方〜配列を使った繰り返し処理まで、最低限の知識を短いサンプルで理解できます!bash の配列を理解すると、シェルスクリプトの応用の幅が広がります。

bash 配列の使い方

bash 配列の初期化

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

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

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

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

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

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

bash 配列の参照

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

${array[index]}

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

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

$ echo ${my_array2[0]}
name2

bash 配列の削除

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

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

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

$ unset my_array2[1]

$ echo ${my_array2[@]}
name2 addr2

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

$ unset my_array2

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

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

#は、長さです。

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

つまり、配列に格納された要素数を調べるには、${#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

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

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

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

$ 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

bash 配列と繰り返し処理

配列は、繰り返し処理で用いられることが多い(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 配列を使う場合のバージョン

配列は、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

bash 算術計算 書き方
シェルスクリプトを書いているとき、計算式が使えると便利なことがあります。ファイルの残りの行数を表示したいな行毎に項目を足して合計を表示したいな入力したデータを計算して処理に使いたいないろいろな状況があると思いますが、bas...
bash リダイレクションによる上書き禁止
何かコマンドからの出力を簡単にファイルに残しておけるので、リダイレクトは良く使います。しかし、たまに大事な既存ファイルに上書きしてしまって失敗することがあります。そんな「よくあるリダイレクトミス」を防ぎましょう!リダイレクト...
シェルスクリプト bash 最新版の利用
シェルスクリプト bash 最新バージョンシェルスクリプト bash バージョン確認bashのバージョン確認を行います。現在、最新版はバージョン4.4(2017年1月)です。$ bash --versionbas...
bash 部分文字列・置換・長さ・連結・分割の文字列処理
bashのよく使う文字列処理、部分文字列・置換・連結・長さ・分割について、サンプルを交えながらまとめます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談部分文字列文字列から部分文字列を取り出すときは、...
bash パイプ 複数コマンド 組み合わせ
複数のコマンドを連続で処理すると、解析作業が効率的に進むときがあります。コマンドの出力結果をソートしたり、さらに絞り込みを行ったりするだけで、分り易い結果になることは良くあることかもしれません。そんなちょっとしたテクニックでは、パイプ(|...
linux コマンド プロセス置換 無駄な一時ファイルを作らない
bashでは、複数のコマンドをパイプでつなぐことができます。しかし、入力をファイルからしか受け取らない一部のコマンドでは、わざわざ一時ファイルを準備する必要があって意外と面倒です。そんなときは、プロセス置換を活用しましょう。無駄な中間ファ...
バックグラウンド実行とフォアグラウンド実行 -プログラムの色んな実行方法-
解析プログラムは長い時間を必要とするものもあります。プログラムの実行や管理方法を理解して、作業効率を効率的に行いましょう。バックグラウンド実行とフォアグラウンド実行バックグラウンド実行をうまく活用しようプログラムの...

関連記事2

xargs 引数を上手に使う | find と xargs でファイルのリネームやコピーをひと工夫
bioinformaticsでは、たくさんのファイルを使うことが多いので、ファイル処理は効率的に行いたいですね。このようなときfind コマンドや xargs コマンドが役に立ちます。例えば、fastqファイルの拡張子を、fq.g...
パス名からファイル名を取得する方法
パス名からファイル名を抽出する場合は、basenameコマンドを使うと簡単です。$ find . -name "test.txt" /aaa/bbb/ccc/test.txt $ find . -name "test.txt...
不要なファイルを探す ファイル名・ファイルサイズ・ファイル更新日時
バイオインフォマティクスの解析では大きなファイルを扱うことが多いので、ストレージの管理には気を使います。ストレージの容量を確保するために、不要なファイルはこまめに削除(または他の場所へ移動・圧縮など)することが、もっとも簡単で確実な方法だ...
ファイル名を一括変更 Windowsエクスプローラーとシェルスクリプト
バイオインフォマティクスでは、データファイルが大量になることがあります。いつも頭を悩ませるのがデータの管理です。たまにファイル名を一括で変更したいときがありますが、便利な方法があるので紹介したいと思います。Windows エクスプ...
シェルスクリプト 引数の与え方とチェック方法
シェルスクリプトに引数を与える場合、引数が少ない場合はエラーにするなどの対策が必要です。一方、引数を10個以上うけとる場合、受け取り側で引数をずらしながら1つずつ取得する必要があります。シェルスクリプトの引数をチェックする...
シェルスクリプト | ファイル存在チェック・空ファイルチェック
bashでスクリプトを作成するときに、よく使うのがファイルの存在チェックです。if文と組合せると、ファイルの有無によって処理を分けることができます。エラー処理も記述できて使いやすいスクリプトになります。様々な処理で活用でき...
シェルスクリプト 関数 スクリプトの書き方
今回は、プログラムの基本構成となる「関数」を作ってみます。シェルで関数を作成すると、普段シェルを使って行っている作業を色々と自動化できて便利なことがあります。少しずつ、使えるようになると良いですね。関数を利用したプログラム...
シェルスクリプト select メニューを作る スクリプトの書き方
select文を使うと、簡単にメニューを作成することができます。但し、Bシェルでは使えず bash を使います。リストでメニュー項目を準備します。select内の変数で、選ばれた項目や入力値を取得することができます。メニュープロンプトは、...
シェルスクリプト Hello World スクリプトの書き方
シェルプログラミングをはじめましょう。使うシェルは「Bシェル」です。Bシェルは機能が少ないのですが、どんなUNIXシステムでも動作するという利点があります。ログインシェルはbashやzshを使っている人が多いと思いますが、これらは...
タイトルとURLをコピーしました