Por que $ '\ 0' ou $ '\ x0' é uma string vazia? Deve ser o caractere nulo, não é?
bate permite$'<strong>string</strong>'
expansão. Minhasman bash
diz:
Palavras do formulário$'<strong>string</strong>'
são tratados especialmente. A palavra se expande parastring
, com caracteres de escape com barra invertida substituídos conforme especificado pelo padrão ANSI C. Seqüências de escape de barra invertida, se presentes, são decodificadas da seguinte maneira:\a
alerta (campainha)\b
backspace\e
\E
um caractere de escape\f
feed do formulário\n
nova linh\r
retorno de carro\t
aba horizontal\v
aba vertical\
barra invertida\'
citação únic\"
citação dupl\nnn
o caractere de oito bits cujo valor é o valor octalnnn
(um a três dígitos)\xHH
o caractere de oito bits cujo valor é o valor hexadecimalHH
(um ou dois dígitos hexadecimais)\cx
a control-x
personage
O resultado expandido é de aspas simples, como se o cifrão não estivesse present
Masporquebate não converter$'\0'
e$'\x0'
em um caractere nulo?
Está documentado? Existe uma razão? (É um recurso ou uma limitação ou mesmo um bug?)
$ hexdump -c <<< _echo
fornece o resultado esperado:
> hexdump -c < <( echo -e '_\x0\x1\x2\x3_' )
0000000 _ \0 001 002 003 _ \n
0000007
My bash version
$ bash --version | head -n 1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Por quêecho $'foo\0bar'
não se comporta comoecho -e 'foo\0bar'
?
\0'echo
fornece o resultado esperado:
> hexdump -c < <( echo -e '_\x0\x1\x2\x3_' )
0000000 _ \0 001 002 003 _ \n
0000007
My bash version
$ bash --version | head -n 1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Por quêecho $'foo\0bar'
não se comporta comoecho -e 'foo\0bar'
?
\x1\x2\x3\x4_'
0000000 _ 001 002 003 004 _ \n
0000007
echo
fornece o resultado esperado:
> hexdump -c < <( echo -e '_\x0\x1\x2\x3_' )
0000000 _ \0 001 002 003 _ \n
0000007
My bash version
$ bash --version | head -n 1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Por quêecho $'foo\0bar'
não se comporta comoecho -e 'foo\0bar'
?