Почему $ '\ 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'
?