とりとめのないことを書いております。
by tempurature
カテゴリ
全体
プログラミング
scheme
verilog
未分類
以前の記事
2016年 04月
2016年 03月
2016年 02月
2016年 01月
2015年 12月
2015年 11月
2015年 10月
2015年 09月
2015年 08月
2015年 07月
2015年 06月
2015年 03月
お気に入りブログ
PHPで競技プログラミング
メモ帳
最新のトラックバック
ライフログ
検索
タグ
人気ジャンル
ブログパーツ
最新の記事
情報処理技術者試験 お疲れ様..
at 2016-04-17 18:55
基本情報技術者試験 平成27..
at 2016-04-14 04:48
基本情報技術者試験 平成27..
at 2016-04-13 23:03
苦い薬(ハーブ、サプリメント..
at 2016-04-09 14:03
「おバカ度チェックリスト」を..
at 2016-03-24 09:54
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧
bashはすごいのか?
bashはシェルスクリプティングで一番メジャーなシェルですが、プログラミング言語としてはいかほどのものなのでしょうか?

BashはBシェル(bsh)に近いのですが、Bシェルよりもインタラプティブです。BシェルはPOSIXで規定されているシェルのことを指しますが対話処理には向かないようであり、CシェルはBシェルと比較してインタラプティブなのでもてはやされた時期があったようです。
(参考:ブルース・ブリン「入門UNIX シェルプログラミング 改訂第2版」)

bashが効果を発揮するのは、主にテキストファイルの操作においてですが、それでもbashは6割くらいしかニーズを満たしてくれません。しかし、自分がやりたかったことがsed, grep, pipeなんかとジャストミートすると恐ろしいくらいコード効率が上がるわけです。つまりperlで100行必要なものが10行で済んでしまう。

6割しかニーズを満たさないので、足りない機能は短いperlコードで補ってやったりするわけですが、それでもperl, rubyだけで書いたプログラムに比べてコード効率がいいし、可読性もテスタビリティも向上します。

ただ、bashコードは3行書くだけでも非常に苦しみますね。そういう意味ではwrite-only-languageたるperlと双極をなすread-only-languageのAdaに近いところがあるかもしれません。(アホすぎる文なので見せ消し) なぜかというと、シェルスクリプトで正規表現を書こうとする場合、getoptやエスケープシーケンスの仕組みなど、スクリプトを書くのを放棄してしまうような罠が結構あったりするからです。

もしそのような問題で苦しんでいる場合、echoコマンドやprintfコマンドが役に立ちます。bashスクリプトではsedやgrepなどのコマンドがbash経由で呼び出されます。

 user -> bash -> sed, grepなど

なので、bashに打ち込んだ文字が自分の意図通りに解釈されているかを知るために、echoコマンドやprintfコマンドを入力して確認します。

user@user-PC ~
$ echo 'windows\directory' | sed -r "s/\/\//g"
sed: -e expression #1, char 8: `s' コマンドが終了していません

user@user-PC ~
$ echo 'windows\directory' | sed -r "s/\\/\//g"
sed: -e expression #1, char 8: `s' コマンドが終了していません

user@user-PC ~
$ echo 'windows\directory' | sed -r 's/\\/\//g'
windows/directory

(例は適当です)

bashの強みはperl, lispと同じくインタプリタが搭載されていて、かつ、Java, C#のIDEのように強力な入力支援機能が搭載されていることです。

<インタプリタの強み>
・マニュアルを見なくともコマンドが存在するか確認できる
・コマンドの使い方に自信がない時、素早く色々試せる

<入力支援機能の強み>
・手が痛くならない
・ゲームみたいで楽しい
・タイプミスが減らせる

とはいえ、bashでプログラミングをするのはlispでプログラムするよりも難易度が高いと思います。自分のしたいことがbashでできるのか見極めることと、自分がしようとしていることよりも効率のよい方法がないか考えることが求められるからです。最初に汚いコードを書いてきれいにしていくというようなやり方はあまりできないと思います。

自分なんかはbashコードを1日に30行も書くことができないです。bashコードを3行書くために100回PEPLしているように思います。なのでbashのプログラミングをすると手よりも頭が疲れてしまいます。まさにプロ仕様の言語なわけです。

だからbashというのは誰でも使っているから大したことがないように思うけれど、実は知る人ぞ知る名言語なのではないかと思うわけなのです。

<追記>
とある名言、
私が知る中で、書く人がタイピングよりも考える事に費やす時間が長い言語は、SQL, Lisp, Haskellだけだ。 - Philip Greenspun
というのに是非bashを加えて頂きたく、どうでしょうか?

[PR]
by tempurature | 2015-08-09 23:38 | プログラミング
<< googleリモートデスクトッ... 【racket】graphin... >>