grep/fgrep/egrep
きむら 『をー。わたしの記憶が古かったのかもしれません。
GNU grep も自分の名前が grep/egrep/fgrep のどれなのかで動作が変わっていたのですが、
これは今でもそうだったかな?』 (2006/12/31 13:15)
これまた、自分もそう思っていたんですが、最近は微妙に違うようです。
自分の使っている Ubuntu に入っている GNU grep 2.5.1 の場合、make の最後でこんなのが実行されます。
echo '#!/bin/sh' >egrep echo 'exec grep -E ${1+"$@"}' >>egrep chmod a+x egrep echo '#!/bin/sh' >fgrep echo 'exec grep -F ${1+"$@"}' >>fgrep chmod a+x fgrep
が、grep.c 自体には以下のコードがあるので、自身の名前を見て判別もするようです。
program_name = argv[0]; if (program_name && strrchr (program_name, '/')) program_name = strrchr (program_name, '/') + 1; if (!strcmp(program_name, "egrep")) setmatcher ("egrep"); if (!strcmp(program_name, "fgrep")) setmatcher ("fgrep");
で、実際 Ubuntu の場合 egrep / fgrep は単なる shell script。
FreeBSD の場合は、hard link になっていて、zgrep とか bzgrep なんかも hard link のようです。