TIPS/sh/「$」のあとのクォーテーション

Last-modified: 2006-11-15 (水) 15:29:18

「$'」

$ 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 桁)。
展開された結果はシングルクォートされているのと同じ状態で、ドル記号は存在しなかったかのように扱われます。