一重引用符とバックスラッシュ


10
~$ echo $'\'test'
'test

man bash 言う:

文字を単一引用符で囲むと、引用符内の各文字のリテラル値が保持されます。バックスラッシュが前に付いている場合でも、単一引用符は単一引用符の間に出現しない場合があります。

なぜそれがecho-コマンドで機能するのですか?

回答:


16

単一引用符'...'は、ドル単一引用符とは異なります$'...'。前者はバックスラッシュをサポートしていませんが、後者はANSI C仕様を使用しています。


14

chorobaの答えは完全に正しいです。ここからの詳細man bash

$ 'string'形式の単語は特別に扱われます。単語は
ANSI Cの指定に従ってバックスラッシュでエスケープされた文字が置き換えられた文字列
標準。バックスラッシュエスケープシーケンスが存在する場合は、次のようにデコードされます。
              \警告(ベル)
              \ bバックスペース
              \ e
              \ Eエスケープ文字
              \ fフォームフィード
              \ n改行
              \ rキャリッジリターン
              \ t水平タブ
              \ v垂直タブ
              \\バックスラッシュ
              \ '単一引用符
              \ "二重引用符
              \?疑問符
              \ nnn値が8進数の値である8ビット文字
                     nnn(1から3桁)
              \ xHH値が16進数である8ビット文字
                     値HH(1桁または2桁の16進数)
              \ uHHHH Unicode(ISO / IEC 10646)文字で、その値は
                     16進値HHHH(1から4桁の16進数)
              \ UHHHHHHHH
                     値がであるUnicode(ISO / IEC 10646)文字
                     16進値HHHHHHHH(1から8桁の16進数)
              \ cx control-x文字

それが理由です!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.