\resources\
のgrepを実行します。どうすればよいですか?
私はもう試した:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
バックスラッシュは多くのアプリケーションにとって特別な文字です:
シェルを含む:single引用符を使用して、別のバックスラッシュまたはよりエレガントにエスケープする必要があります:
$ printf '%s\n' foo\\bar 'foo\bar'
foo\bar
foo\bar
ここで、コマンドは値foo\bar
の2つの引数を受け取りました。これらはそのまま端末にエコーされました。
(上記では、printf
の代わりにecho
を使用しました。多くのecho
実装も独自にバックスラッシュを解釈します(ここでは\b
をバックスペース文字に展開します)) 。
ただし、バックスラッシュはgrep
の特殊文字でもあります。このコマンドは、\(
、\|
、\.
などの多くの特別なシーケンスを認識します。そのため、同様に、実際のバックスラッシュ文字に対して、grepに二重の\\
を与える必要があります。つまり、シェルを使用して次のように入力する必要があります。
grep 'foo\\bar'
または同等:
grep foo\\\\bar
(両方の行は、シェルにgrep
への引数としてfoo\\bar
を送信するように指示します)。
他の多くのコマンドは、引数の一部でバックスラッシュを解釈します...そして、2つのレベルのエスケープが必要です(1つはシェルの解釈をエスケープするため、もう1つはコマンドの解釈をエスケープするため)。
ちなみに、シェルの場合、単一引用符'…'
はあらゆる種類の文字解釈を防止しますが、二重引用符はそれらの一部のみを防止します。特に$
、`
および\
"…"
内のアクティブな文字のままにします。
fgrep
(-F
フラグを付けたgrep
のみ)を使用することもできます。これにより、grepはパターンを固定文字列として解釈します(つまり、\
をリテラル\
として扱います)。シェルによる拡張からバックスラッシュを保護する必要があります。
grep -F '\resources\'
grep
には、バックスラッシュを表すfourバックスラッシュが必要です。
grep "\\\\resources\\\\"