一重引用符と二重引用符には、エスケープに関して違いがあります。echo
実際に何が送信されるかを確認するために前に置いてくださいegrep
:
$ echo egrep \' file
egrep ' file
$ echo egrep "\'" file
egrep \' file
$ echo egrep "[\']" file
egrep [\'] file
$ echo egrep '\'' file
>
最後のケースは、まだ一重引用符で囲まれた式の中にあるため、より多くの入力を求めるプロンプトです。一重引用符でエスケープされた引用符(\'
)ではありません(一重引用符をエスケープする方法ではないため)。一重引用符間のバックスラッシュです。末尾の冒頭の引用符付き。
ちなみに、一重引用符で囲まれた文字列で一重引用符をエスケープするには、次のような構造を使用します。
$ echo 'foo'\''bar'
foo'bar
\'
これが実際に行っているのは、2つの一重引用符で囲まれた文字列の間に裸のリテラルquote()を置くことです。これらはすべて暗黙的に連結されます。
なぜ"\'"
すべての行に一致するのかわかりません(しかし、実際に一致しているようです)。