このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

bashの何が最悪なのか

  • 不合理な構文: ${!…} は、「困ったらとりあえずビックリ」という方針な気がする。
  • トークンと式と文とデータ(リテラル)の区別が曖昧。
  • 式の評価方式がハッキリしない。
  • 式の値=データもハッキリしない。
  • データの実際の値をインスペクトするのが困難
  • 状態や複合データに対して、列挙と存在確認が困難。
  • 非存在と特殊値の区別が困難(存在確認の困難さと同じ)
  • 隠れたデータ構造(ワードリスト)があり、これが挙動に影響を与える。
  • リテラル表現が極めて貧弱
  • 型強制(コアージョン)が不合理で、しかも多用される。配列・複合配列→文字列のコアージョンなんて最低だろう。
  • ツギハギ構文。[ ] はコマンド、しかも閉じカッコは単なる引数トークン。[[ ]] はシェルキーワード、したがって区切り記号。(( )) は立場が不明。少なくとも type では不明。
  • 同一構文に複数の意味:配列と連想配列がその例
  • 極端に文脈依存な解釈
  • テキスト処理(マクロ展開)が入っている。
  • テキストが、式とデータの両方で使われて、解釈(≒マクロ展開、テンプレート展開)が何度も行われるのでワケワカラン。
  • 代入文がトークン? もともとはコマンドの飾り(prefix, suffix)だったようだ。
  • 展開順序が分かりにくい。x=hello echo $x の例。
  • オプションにより挙動が変わる。set -f, set -u とか。set -o、shoptで山のようなオプション。

それと、変数の浅い束縛により、関数の呼び出しスタック(チェーンかも知れない)を上向きにたどる変数検索。便利とも言えるが、大規模プログラムでこれは厳しい。バグの温床になる。古いスクリプト言語はだいたいコレを使っている。動的で便利だという名目で。