「$'」
$ echo 'aaa\nbbb'
aaa\nbbb
$ echo $'aaa\nbbb'
aaa
bbb
エスケープシーケンスをデコードするようになる
「$"」
$ echo "aaa\nbbb"
aaa\nbbb
$ echo $"aaa\nbbb"
aaa\nbbb
変化なし??
man bashより
ダブルクォートされた文字列の前にドル記号($)があると、文字列は現在のロケールに従って変換されます。現在のロケールが C または POSIX ならば、ドル記号は無視されます。文字列が変換されたり置換された場合には、その結果はダブルクォートされているのと同じ状態になります。
(-Dオプション用かも?コマンドを実行しないで標準出力にはくだけしたい場合用?)
- -D
二重引用符によるクォート文字列 (double-quoted strings) に $ が前置されたものを、
全てリストして標準出力に出力します。
これらは、カレントロケールが C または POSIX 以外の時に、
翻訳の対象となるべき文字列です。
このオプションを指定すると、自動的に -n オプションも
指定されたことになります。つまりコマンドは全く実行されません。
$'string' の形式を持つ単語は特殊な扱いを受けます。この単語は string に展開され、それから ANSI C 標準で仕様が決められている、バックスラッシュでエスケープされている文字に置き換えられます。バックスラッシュエスケープシーケンスは、 (もし存在すれば) 以下のようにデコードされます:
\a
警告 (ベル)
\b
バックスペース
\e
エスケープ文字
\f
フォームフィード文字
\n
改行文字
\r
復帰文字
\t
水平タブ文字
\v
垂直タブ文字
\\
バックスラッシュ
\'
シングルクォート
\nnn
ASCII コードの 8 進値が nnn である文字 (1 文字につき数字 3 桁)。
\xnnn
ASCII コードの 16 進値が nnn である文字 (1 文字につき数字 3 桁)。
展開された結果はシングルクォートされているのと同じ状態で、ドル記号は存在しなかったかのように扱われます。