なぜ「ドット」を2回エスケープするのですか?

なぜ「ドット」を2回エスケープするのですか?

*(){}$withなどの特殊文字をエスケープして\リテラルとして処理できることを知っています。
たとえば、\*または\$

ただし.、2回行う必要がある場合は、そうでなければ\\.特殊文字と見なされます。例:

man gcc | grep \\.

なぜですか?

答え1

通常、特殊文字を文字通り処理するには一度だけエスケープします。複数のプログラムでパターンを使用するため、2回実行する必要がある場合があります。

あなたの例を議論しましょう。

man gcc | grep \\.

コマンドはbashインタプリタとgrep。最初のエスケープはbashKnowを\文字通り受け入れるので、2番目のエスケープが渡されますgrep

一度だけエスケープすると、ドットが文字通り取られてに渡されることが\.わかります。これを見ると、ドットはテキストではなく特殊文字だと思います。bash.grepgrep..

2回エスケープするとbashパターンが\.に渡されますgrep。これでgrep文字通りのポイントであることがわかります。

答え2

Bashが引数を解釈しないようにするには、引数を引用符で囲みます。

man gcc | grep "\."

関連情報