2013-04-12 2 views
7
> echo 0 
0 
> echo \0 
0 
[email protected]:~ 
> echo \\0 

[email protected]:~  
> echo "\\0" 
        # <--- What!!? 
[email protected]:~ 
> echo \\\0 

[email protected]:~ 
> echo "\\\0" 
\0 
[email protected]:~ 
> bash 
Executing .bashrc 
$ echo "\0" 
\0 
$ echo "\\0" 
\0 
$ echo "\\\0" 
\\0 

Ich muss sagen, bash Verhalten macht viel mehr Sinn für mich.Warum muss ich "\ 0" eingeben, um eine Zeichenfolge " 0" in zsh zu erstellen?

Weitere Details:

[email protected]:~ 
> echo "0" | hexdump -C 
00000000 30 0a            |0.| 
00000002 
[email protected]:~ 
> echo "\0" | hexdump -C 
00000000 00 0a            |..| 
00000002 
[email protected]:~ 
> echo "\\0" | hexdump -C 
00000000 00 0a            |..| 
00000002 
[email protected]:~ 
> echo "\\\0" | hexdump -C 
00000000 5c 30 0a           |\0.| 
00000003 
[email protected]:~ 
> echo "\\\\0" | hexdump -C 
00000000 5c 30 0a           |\0.| 
00000003 
[email protected]:~ 
> echo "\\\\\0" | hexdump -C 
00000000 5c 00 0a           |\..| 
00000003 
[email protected]:~ 
> echo "\\\\\\0" | hexdump -C 
00000000 5c 00 0a           |\..| 
00000003 
[email protected]:~ 
> echo "\\\\\\\0" | hexdump -C 
00000000 5c 5c 30 0a          |\\0.| 
00000004 

Das größte Problem ist, dass es keinen Wert, um das gewünschte Ergebnis \0 sowohl bash und zsh produziert.

Update:

[email protected]:~ 
> echo '0' | hexdump -C 
00000000 30 0a            |0.| 
00000002 
[email protected]:~ 
> echo '\' | hexdump -C 
00000000 5c 0a            |\.| 
00000002 
[email protected]:~ 
> echo '\\' | hexdump -C 
00000000 5c 0a            |\.| 
00000002 
[email protected]:~ 
> echo \\ | hexdump -C 
00000000 5c 0a            |\.| 
00000002 
[email protected]:~ 
> echo '\\0' | hexdump -C 
00000000 5c 30 0a           |\0.| 
00000003 

Sieht aus wie einfache Anführungszeichen verwenden hilft konsistentes Verhalten zu bekommen. Ich würde es lieben, wenn jemand das Verhalten mit den Anführungszeichen erklärt.

+0

was ergibt echo "\\"? Auch einfache Anführungszeichen sind einen Versuch wert: echo '\ 0' – catholicon

Antwort

3

Verwenden Sie einfache Anführungszeichen und deaktivieren Sie die Escape-Behandlung im Echo mit dem Flag -E.

echo -E '\0' sollte eine \0 sowohl auf zsh und bash (und Bindestrich) produzieren.

1

Dies ist der Standard (lesen tragbar) Art und Weise, es zu tun:

printf "\0" 

funktionieren soll unabhängig von den (Unix dergleichen) OS, unabhängig von der Schale.