質問: 他の人が、次のように1文字だけ角括弧で囲んで grep コマンドを実行しているのを見ました。 ``` ps -ax | grep [e]macs ``` 単に `grep emacs` と実行するのとどう違うのでしょうか?
回答: [こ]のように書くことで、`grep` プロセス自身が検索にひっかからなくなります。 `grep` は正規表現をサポートしているので、角括弧を使ってたとえば `[abc]macs` と書くと `amacs`, `bmacs`, `cmacs` にマッチします。今回のように1文字だけ指定して `[e]macs` と書くと、マッチとしては `emacs` と書くのと同じ動作をします。 ところでこの正規表現は `grep` が解釈するものでシェルが解釈するものではないので、`ps -ax` の出力にも `[e]macs` と表示されます。したがってこれ自体は `[e]macs` というパターンにマッチしません。 このため、`[e]macs` をパターンとして使うと検索を実行している `grep` プロセス自体が表示されなくなり、紛らわしさが減ります。 ``` $ ps -ax | grep emacs 154 ? Ss 0:00 emacs --daemon 5502 tty1 R 0:00 grep --color=auto emacs $ ps -ax | grep [e]macs 154 ? Ss 0:00 emacs --daemon ```