bash позволяет расширение $'string', Мой man bash говорит:
Слова формы
$'string'рассматриваются специально. Слово расширяется доstring, при этом символы с обратным слэшем-экранированием заменяются в соответствии со стандартом ANSI C. Последующие последовательности обратного слэша, если они есть, декодируются следующим образом:
\aпредупреждение (звонок)
\bbackspace
\e
\eescape-символ
\ffeed feed\nновая строка
\rвозврат каретки
\tгоризонтальная вкладка
\vвертикальная вкладка
\обратная косая черта
\'одинарная цитата
\"двойная цитата
\nnnвосьмибитовый символ, значением которого является восьмеричное значениеnnn(от одной до трех цифр)
\xHHвосьмибитовый символ, значение которого представляет собой шестнадцатеричное значениеHH(одна или две шестнадцатеричные цифры)
\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'?