たかはらです。今日は小ネタです。
早速ですが質問をさせて下さい。
UNIXのよくつかうコマンドgrepで-hogeという文字列を検索したい場合どのようにしますか?
例えば以下のようにしてしまうとどうなるでしょうか?
grep -hoge fuga.txt
この実行結果は以下のようになります。

残念ながら以下の2案も同じ結果です。
かこってみたり…
grep "-hoge" fuga.txt
エスケープしてみたり…
grep \-hoge fuga.txtいずれの場合も-hogeがコマンドの引数ではなくオプションとして扱われてしまっていますね。それじゃどうすれば良いのでしょうか?答えを知りたい方は続きをどうぞ!
答え
grep -- -hoge fuga.txt
( ゚д゚)
(つд⊂)ゴシゴシ
(;゚д゚)

grepに限らずこの単独の”–”がUNIXのほとんどのコマンドで意味を持ちます。
UNIXのコマンドオプションの構文解析には、getopt()というCの標準関数が一般的に使われています。getopt()はコマンドオプションに--を見つけるとオプションの解析を終了します。つまり”–”以降をオプションではなくコマンドの引数とみなすため、-hogeはオプションではなくコマンドの引数として扱われます。

コメント / トラックバックはありません
コメントする