このようにバックスラッシュを一重引用符で囲むと
エコー '\'
バックスラッシュを出力し、エスケープは気にしません。
しかし、このようにsedで同じものを使用すると
sed 's/\/a/g': バックスラッシュを a に置き換えようとしています
またはgrepの場合
echo '\\//' |grep '\' は機能せず、エスケープも必要です。
なぜこのバックスラッシュをエスケープする必要があるのですか? つまり、これらすべての意味が失われますよね?
バックスラッシュの問題は、複数のツールや複数のコンテキストに対して、多くの特別な意味があることです。
一重引用符で囲むと、シェルの特別な意味が失われます(関連性がある場合、または不明な場合は、質問にその名前のタグを付けることを学習してください)が、特別な意味を保持します(正規表現sed
構文では特別なので、期待されます)と)_sed
grep
通常、バックスラッシュを引用符で囲む代わりにエスケープできます。必ずしも読みやすくなるとは限りませんが、状況によっては読みやすくなります。これが、引用符なしでリテラルをgrepする方法です。\
grep \\\\
\\\\
シェルはに変わり\\
、\\
正規表現ではリテラルを意味し\
ます。