シェルスクリプトで二次元配列のようなもの

XWSS016939_s

シェルスクリプトでは二次元配列が用意されていないらしい。

けれど、必要になるケースはあるだろう。ということで調べてみると、様々な実現方法が出ていた。

だが、お手本を真似してみるも、手元の環境では実現できないものもあったりと、なかなか悪戦苦闘した。

スポンサードリンク

結果

最初にスクリプトを実行した結果を書く。

これは期待した結果だ。

$ sh t_sh_array2.sh
---
mode  : f
target: /hoge/foo
---
mode  : d
target: /hoge/bar

したいこと

すでにシェルスクリプトがあるとする。

これには、処理の対象となるディレクトリが配列を使って定義されていて、逐次取り出し、何らかの処理を行うようにスクリプトが組まれているとする。

ある時、ディレクトリによって処理を分岐したい立ったとすれば、PHPやPerlなら二次元配列にするなり連想配列を使うなり、適当に処理を変更することができるけれど、シェルスクリプトでは、サクッと解決できないらしい。

そこで、順番が逆になるが、さらりとこれらの問題を解決できそうなウェブサイトをチラ見して、定義部を考えることにした。というのも、二次元配列にするとか、文字列を分割するとか、様々な方法があるから、方向性を決めたほうが問題を解決しやすそうだと感じたからだ。

サンプルソース

というわけで、先ほど記述した”二次元配列のようなもの”をテストして、上手く行った例が以下のコード。

#!/bin/bash

# Ver. 0.0.1 2013.04.16 like an Array2 test in shel script

# insert values into array
settings=(
"f /hoge/foo"
"d /hoge/bar"
)

# loop
for ((i=0; ${#settings[*]}>$i; i++))

  # start
  do

    # split values
    tmp=(${settings[$i]})

    # display value
    echo "---"
    echo "mode  : ${tmp[0]}"
    echo "target: ${tmp[1]}"

  # end
  done

# end script
exit

参考文献

関連記事

スポンサードリンク

Comments

コメントを残す

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