QA@IT

grepのvオプションの意味(由来?)について

4211 PV

grepの v オプションは invert の v なのでしょうか?
それとも他になにか由来はありますか?

Linuxは tar の -t が table of contents の tだったり
tac が cat の逆読みだったりコマンドやそのオプションの名前には
由来がある物が多いと思うのですが、
そのことについてはmanを見ても載っていないようです。

コマンドやオプションの名前の由来について調べられるサイトなどはないのでしょうか?

回答

そもそものgrepのgがedのgコマンド由来なので、vオプションはedのvコマンド由来でしょう。
で、なぜedで v なのかについては、edではinvertの i やrevertの r がエディタとしてより基本的な機能に割り当て済みなので、残っている英字の中でそれらしい(?) v が選ばれたのだと思います。gのglobalというのも無理矢理っぽいですし。

編集 履歴 (0)

由来などがまとまっているサイトは知らないですが、ソースのコミット履歴をたどると、物によっては面白い結果が出てきそうです。

ということでGNU grepを調べて見たところ、grepのvオプションはinvertのvとも言えますが、revertのvとも言えるようです。

GNU grepのFirst commit(1998年11月)の時点では同様のオプションがrevert-matchとして提供されており、この時点で省略表記は-vとなっています。

Miscellaneous:\n\
 -s, --no-messages suppress error messages\n\
 -v, --revert-match select non-matching lines\n\
 -V, --version print version information and exit\n\
 --help display this help and exit\n"));

http://git.savannah.gnu.org/cgit/grep.git/diff/src/grep.c?id=06b9f7e683e7650804cadd9a4c5cf6bff6c89625

その9ヶ月後の1999年8月にKarl Berryさんからの提案を受けてinvert-matchに変更されたようですが、メーリングリストのアーカイブが2004年までしか公開されていないため、このやり取りについては追いかけられませんでした。
http://git.savannah.gnu.org/cgit/grep.git/commit/?id=aee993f557e9933c20d6e4753bf4ef2ee857b363

ここからは想像です。
--revert-matchという名前から略称をつけようとした時点では再帰オプションは無かったようですが、後々の実装を考えれば-rは--recursive用に残しておくでしょう。
とすると、次の子音であるv・・・という考えが働いたのかもしれません。

編集 履歴 (0)
  • なるほど〜。詳しい解説ありがとうございます。自分の英語力だと何故revertだったのかはわからないんですが、-r を避けたというのはありそうですね。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。