Почему $ '\ 0' или $ '\ x0' - пустая строка? Должен быть нулевой символ, не так ли?

Баш позволяет$'<strong>string</strong>' расширение. Мойman bash говорит:

Слова формы$'<strong>string</strong>' лечатся специально. Слово расширяется доstring, символы с обратной косой чертой заменяются в соответствии со стандартом ANSI C. Escape-последовательности с обратной косой чертой, если они есть, декодируются следующим образом:
\a оповещение (звонок)
\b Backspace
\e
\E спасательный персонаж
\f форма подачи
\n новая лини
\r возврат каретк
\t горизонтальная табуляция
\v вертикальная табуляция
\ обратная косая черта
\' одинарная кавычка
\" двойная кавычка
\nnn восьмибитный символ, значение которого является восьмеричным значениемnnn (от одной до трех цифр)
\xHH восьмибитный символ, значение которого является шестнадцатеричным значениемHH (одна или две шестнадцатеричные цифры)
\cx контроль-x персона

Расширенный результат заключен в одинарные кавычки, как если бы знак доллара отсутствовал.

НоПочему Баш не конвертировать$'\0' а также$'\x0' в нулевой символ?
Это задокументировано? Есть ли причина? (Это особенность, ограничение или даже ошибка?)

$ hexdump -c <<< _

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'?

\0'

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'?

\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'?

Ответы на вопрос(3)

Ваш ответ на вопрос