Dlaczego $ „\ 0” lub $ „\ x0” jest pustym ciągiem? Powinien być znakiem zerowym, prawda?
grzmotną pozwala$'<strong>string</strong>'
ekspansja. Mójman bash
mówi
Słowa kluczowe formularza$'<strong>string</strong>'
są traktowane specjalnie. Słowo rozwija się dostring
, z zastąpionymi znakami odwrotnego ukośnika znakami określonymi przez standard ANSI C. Sekwencje specjalne odwrotnego ukośnika, jeśli występują, są dekodowane w następujący sposób:\a
alert (dzwonek)\b
backspace\e
\E
znak ucieczki\f
formularz feed\n
Nowa lini\r
powrót karetki\t
karta pozioma\v
karta pionowa\
ukośnik wsteczn\'
pojedynczy cytat\"
cudzysłó\nnn
ośmiobitowy znak, którego wartość jest wartością ósemkowąnnn
(jedna do trzech cyfr)\xHH
ośmiobitowy znak, którego wartość jest wartością szesnastkowąHH
(jedna lub dwie cyfry szesnastkowe)\cx
kontrola-x
posta
Rozwinięty wynik jest cytowany pojedynczo, tak jakby znak dolara nie był obecny.
Aledlaczegogrzmotną nie konwertować$'\0'
i$'\x0'
w znak null?
Czy to jest udokumentowane? Czy jest powód? (Czy to funkcja, ograniczenie, a nawet błąd?)
$ hexdump -c <<< _echo
daje oczekiwany wynik:
> hexdump -c < <( echo -e '_\x0\x1\x2\x3_' )
0000000 _ \0 001 002 003 _ \n
0000007
Moja wersja bash
$ bash --version | head -n 1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Czemuecho $'foo\0bar'
nie zachowuje się jakecho -e 'foo\0bar'
?
\0'echo
daje oczekiwany wynik:
> hexdump -c < <( echo -e '_\x0\x1\x2\x3_' )
0000000 _ \0 001 002 003 _ \n
0000007
Moja wersja bash
$ bash --version | head -n 1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Czemuecho $'foo\0bar'
nie zachowuje się jakecho -e 'foo\0bar'
?
\x1\x2\x3\x4_'
0000000 _ 001 002 003 004 _ \n
0000007
echo
daje oczekiwany wynik:
> hexdump -c < <( echo -e '_\x0\x1\x2\x3_' )
0000000 _ \0 001 002 003 _ \n
0000007
Moja wersja bash
$ bash --version | head -n 1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Czemuecho $'foo\0bar'
nie zachowuje się jakecho -e 'foo\0bar'
?