0

このようにバックスラッシュを一重引用符で囲むと

エコー '\'

バックスラッシュを出力し、エスケープは気にしません。

しかし、このようにsedで同じものを使用すると

sed 's/\/a/g': バックスラッシュを a に置き換えようとしています

またはgrepの場合

echo '\\//' |grep '\' は機能せず、エスケープも必要です。

なぜこのバックスラッシュをエスケープする必要があるのですか? つまり、これらすべての意味が失われますよね?

4

1 に答える 1

3

バックスラッシュの問題は、複数のツールや複数のコンテキストに対して、多くの特別な意味があることです。

一重引用符で囲むと、シェルの特別な意味が失われます(関連性がある場合、または不明な場合は、質問にその名前のタグを付けることを学習してください)が、特別な意味を保持します(正規表現sed構文では特別なので、期待されます)と)_sedgrep

通常、バックスラッシュを引用符で囲む代わりにエスケープできます。必ずしも読みやすくなるとは限りませんが、状況によっては読みやすくなります。これが、引用符なしでリテラルをgrepする方法です。\

grep \\\\

\\\\シェルはに変わり\\\\正規表現ではリテラルを意味し\ます。

于 2013-02-10T12:35:31.843 に答える