bashでの配列の使用 [Linux]
Perl スクリプトをシェルスクリプト(bash on Linux) に移植する必要があり、対応を行った。
この過程で、スクリプトの可読性を良くするために配列(連想配列を含む)を使用した。
以下は、備忘録として、配列の使用に関して要点をまとめたものである。
1. 配列 (indexed array)
2. 連想配列 (associative array、hash)
この過程で、スクリプトの可読性を良くするために配列(連想配列を含む)を使用した。
以下は、備忘録として、配列の使用に関して要点をまとめたものである。
1. 配列 (indexed array)
(1) 変数の宣言
通常の変数の場合と同じである。
・通常は変数の宣言は不要である。
・local により、関数内のローカル変数として宣言することが可能である。
(2) 値の設定
(a) 要素毎の設定
a_demo[0]=a a_demo[1]=b
(b) 全要素の設定
a_demo=(a b)
(補足)
・空の配列の作成: a_demo=()
・配列の宣言と要素の設定を同時にすることが可能である。
local a_demo=(a b)
(c) 配列要素の追加
a_demo+=(c)
(3) 値の参照
${#a_demo[*]} ... 要素数 ${a_demo[*]} ... 全要素 ${a_demo[n]} ... n 個目の要素
(補足)
* の代わりに @ を使用することも可能である。
両者の違いは、通常の変数参照時の "$*" と "$@" の違いと同様である。
2. 連想配列 (associative array、hash)
bash v4 で追加された機能である。
未対応のバージョンでは、エラーとなる。
(1) 変数の宣言
使用する前に、連想配列としての変数の宣言が必要である。
declare -A h_demo
(補足)
関数内で上記の変数宣言を行った場合には、当該関数内でのみ有効となる。
(関数内でのローカル変数となる。)
(2) 値の設定
(a) 要素毎の設定
h_demo[Jan]=1 h_demo[Feb]=2
(b) 全要素の設定
h_demo=([Jan]=1 [Feb]=2)
(補足)
・空の連想配列の作成: h_demo=()
・連想配列の宣言と要素の設定を同時にすることが可能である。
declare -A h_demo=([Jan]=1 [Feb]=2)
(3) 値の参照
${#h_demo[*]} ... 要素数 ${!h_demo[*]} ... 全要素(key) ${h_demo[*]} ... 全要素(value) ${h_demo[key]} ... 特定の要素(key に対応する value)
(補足)
* の代わりに @ を使用することも可能である。
両者の違いは、通常の変数参照時の "$*" と "$@" の違いと同様である。
コメント 0