man bash
引用符の仕組みには、エスケープ文字、シングルクォーテーション、ダブルクォーテーションの3つがあります。
引用符で囲まれていないバックスラッシュ ( ** ) は escape character です。これは、次の文字のリテラル値を保持します。もし\* ✿が現れ、バックスラッシュがそれ自体引用されていない場合、*** ✿は、行の続きとして扱われる(つまり、入力ストリームから取り除かれ、事実上無視される)。
単一引用符で文字を囲むことは、引用符内の各文字のリテラル値を保持する。単一引用符の間には、バックスラッシュが先行していても、単一引用符が発生することはありません。
二重引用符で囲む文字は、引用符内のすべての文字のリテラル値を保持しますが、$ 、` , ** , and, when history expansion is enabled, **!. The characters $ and ` は二重引用符内で特別な意味を保持します。バックスラッシュは、以下のいずれかの文字の後に続く場合にのみ特別な意味を持ちます。$ , ` , “ , ** , または **<newline>。二重引用符は、二重引用符の前にバックスラッシュを付けることで、二重引用符の中に引用することができます。この機能を有効にすると、二重引用符の中の!がバックスラッシュでエスケープされない限り、履歴の展開が行われます。!の前のバックスラッシュは削除されません。
特別なパラメータ * と @ は、二重引用符で囲まれている場合、特別な意味を持ちます(後述の PARAMETERS を参照)。
$‘ string ’形式の単語は特別に扱われます。単語は string に展開され、バックスラッシュエスケープされた文字は ANSI C 標準で指定されているように置き換えられます。バックスラッシュエスケープシーケンスが存在する場合、以下のようにデコードされます。
**\a** alert (bell) **\b** backspace **\e**** \E **an escape character** \f **form feed** \n **new line** \r **carriage return** \t **horizontal tab** \v **vertical tab** \ **backslash**
展開された結果は、あたかもドル記号が存在しないかのように単一引用符で囲まれます。
ダブルクォートで囲まれた文字列の前にドル記号 ( **$"** _string_ **"** ) をつけると、文字列は現在のロケールに応じて翻訳されます。現在のロケールが **C** または **POSIX** の場合、ドル記号は無視されます。文字列が翻訳されて置換された場合は、ダブルクォートで置換されます。 **single quote** \" **double quote** \**_nnn_ the eight-bit character whose value is the octal value _nnn_ (one to three digits)**\x**_HH_ the eight-bit character whose value is the hexadecimal value _HH_ (one or two hex digits)**\u**_HHHH_ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _HHHH_ (one to four hex digits)**\U**_HHHHHHHH_ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _HHHHHHHH_ (one to eight hex digits)**\c**_x_ a control-_x_ character
展開された結果は、あたかもドル記号が存在しないかのように単一引用符で囲まれます。
ダブルクォートで囲まれた文字列の前にドル記号 ( $” string “ ) をつけると、文字列は現在のロケールに応じて翻訳されます。現在のロケールが C または POSIX の場合、ドル記号は無視されます。文字列が翻訳されて置換された場合は、ダブルクォートで置換されます。