bashは拡張を許可します。私は言います:$'string'
man bash
フォームの単語は特別に扱われます。単語は に展開され、バックスラッシュでエスケープされた文字は ANSI C 標準の指定に従って置き換えられます。 バック スラッシュ の エスケープ シーケンス が 存在 する場合は、次のよう に デコード さ れ ます 。 数字) 値が 16 進数値である 8 ビット文字
$'string'
string
\a
\b
\e
\E
\f
\n
\r
\t
\v
\
\'
\"
\nnn
nnn
\xHH
HH
(1 桁または 2 桁の 16 進数) 制御文字
\cx
x
展開された結果は、ドル記号がなかったかのように単一引用符で囲まれます。
しかし、なぜbashはヌル文字に変換されない$'\0'
のでしょうか? $'\x0'
それは文書化されていますか?理由はありますか?(それは機能ですか、制限ですか、それともバグですか?)
$ hexdump -c <<< _$'\0'$'\x1\x2\x3\x4_'
0000000 _ 001 002 003 004 _ \n
0000007
echo
期待される結果が得られます:
> hexdump -c < <( echo -e '_\x0\x1\x2\x3_' )
0000000 _ \0 001 002 003 _ \n
0000007
私のbashバージョン
$ bash --version | head -n 1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
echo $'foo\0bar'
のように動作しないのはなぜecho -e 'foo\0bar'
ですか?