*(){}$
withなどの特殊文字をエスケープして\
リテラルとして処理できることを知っています。
たとえば、\*
または\$
ただし.
、2回行う必要がある場合は、そうでなければ\\.
特殊文字と見なされます。例:
man gcc | grep \\.
なぜですか?
答え1
通常、特殊文字を文字通り処理するには一度だけエスケープします。複数のプログラムでパターンを使用するため、2回実行する必要がある場合があります。
あなたの例を議論しましょう。
man gcc | grep \\.
コマンドはbash
インタプリタとgrep
。最初のエスケープはbash
Knowを\
文字通り受け入れるので、2番目のエスケープが渡されますgrep
。
一度だけエスケープすると、ドットが文字通り取られてに渡されることが\.
わかります。これを見ると、ドットはテキストではなく特殊文字だと思います。bash
.
grep
grep
.
.
2回エスケープするとbash
パターンが\.
に渡されますgrep
。これでgrep
文字通りのポイントであることがわかります。
答え2
Bashが引数を解釈しないようにするには、引数を引用符で囲みます。
man gcc | grep "\."