bashダメすぎる

最近仕事でbashを使ってるのだけれど、これダメすぎ。。
bashスクリプトって、それ自体が言語というより、機能の少ないマクロプロセッサの最終段にコマンド実行機能が付いてる感じがする。
イヤでイヤでがまんならないところ

  • 配列以外のデータの構造化が出来ない(ハッシュ欲しい、構造体でもいい)
  • 変数のスコープがダイナミックスコープ

ちょろちょろしたコードを書くなら楽で良いけど、ちょっとコードが大きくなると、かなりつらくなる。

bash用の作法ってのがあるんだろうけど、よくわからない。


構造化されたデータを扱うには、↓感じで名前を操作して、構造化しているように見せかけるしかない。
http://emasaka.blog65.fc2.com/?q=bash&page=2


でもコレも、インスタンスを別の関数に渡すときに苦労する。
インスタンスを受け取った関数は、引数に渡された名前が指す変数を操作する必要があるので。
なにをやってるのか見えなくなる。(特に、書いた人以外が見ると)

#インスタンス変数 Instance のプロパティ name が Instance_name とかに
#マングリングされてるとする。

#引数がスペース区切りな時点で面倒。。
#かつ Instance は変数なのに、ベアワード(というか文字列)渡し
func Instance "hoge hoge";

とかやるときの、funcの実装は

function func() {
  #
  local var_name=$1;
  local argv1=$2

  #たとえば、Instance_name を取得する
  local name=${var_name}_name
  #${!name} が何をやってるのかbashのマニュアルを見ずに分かる人は少ないだろう。
  echo ${!name}

  #たとえば、Instance_name の設定
  #単純な代入にeval使ってるコードを見て、イヤにならないだろうか?
  #さらに追い打ちをかける、$argv1の$の前の\。
  eval $name=\$argv1
}

あ〜、イライラしてきた。