シェルスクリプト #!
シェルスクリプトは先頭の1行にどんなシェルプログラムを利用するかを指定する事になっている。→シェバン(shebang)
#! /bin/bash
てな具合。昔はシェルといえば sh (Bourne)しかなかったから気にならなかったけれど、BSDに csh が搭載されるようになると B か C 迷うので対策が考えられた。sh には何もしない(NOP: No operation) コマンドというのがあって、それが先頭にあるとB、コメント # なら C というやつ。
: ホゲホゲ ⇦ Bsh # シカジカ ⇦ Csh
古いUNIXの書物(McGraw-Hill の Unix Worldとか、1990年初頭にちょくちょく投稿していた)だと、これが常識。1行目をみて「あ、これはCshなのね」という感じ。
この小ネタとしては、# は Bsh, Csh ともにコメントで : は Bsh では NOP という事。具体的には # は両シェルとも読み飛ばす(無視)するけど、: はイチよ〜 Bsh は解析するので多少処理時間がかかる。
CentOS 7 の sh はもやは bash だけど(/bin/sh が /usr/bin/bash へのリンク) 1万行の : と # のファイルを実行してみた。すると
$ time bash colon real 0m0.028s user 0m0.025s sys 0m0.003s< $ time bash hash real 0m0.015s user 0m0.010s sys 0m0.005s
今でも : の方が処理時間がかかる。くどいけど csh (これまた tcshだけど)でもやってみた。
$ time csh colon real 0m0.179s user 0m0.116s sys 0m0.063s $ time csh hash real 0m0.051s user 0m0.036s sys 0m0.015s
同様に : の方が時間がかかる。というか csh 重いなぁと今更ながら思うのであった。