shとLisp
/bin/sh スクリプトをちょくちょく書いていてふと気づいた、shのすごいところ。というか、Lispとの共通点。
- 式と記号を区別しない
- ラムダが使える(!!)
つまり、Lispの対話環境で
> (define boo '(+ 1 1)) boo > boo (+ 1 1) > (eval boo) 2 > (+ 1 (eval boo)) 3 > (define foo (lambda (s1 s2) (+ 1 s1 s2))) foo > (foo 1 2) 4
とするのは、shで
% boo='expr 1 + 1' % echo $boo expr 1 + 1 % $boo 2 % expr 1 + `$boo` 3 % foo='expr 1 + $1 + $2' % sh -c "$foo" -r 1 2 4
とできるんですわ。
shはある意味、最強のメタプログラミング言語(環境)かもしれんなぁ。