为什么在zsh中创建字符串"\0"必须输入"\\\0"?

7
> echo 0
0
> echo \0
0
slu@dev:~
> echo \\0

slu@dev:~    
> echo "\\0"
                   # <--- What!!?
slu@dev:~
> echo \\\0

slu@dev:~
> echo "\\\0"
\0
slu@dev:~
> bash
Executing .bashrc
$ echo "\0"
\0
$ echo "\\0"
\0
$ echo "\\\0"
\\0

我必须说,Bash的行为对我来说更有意义。
更多细节:
slu@dev:~
> echo "0" | hexdump -C
00000000  30 0a                                             |0.|
00000002
slu@dev:~
> echo "\0" | hexdump -C
00000000  00 0a                                             |..|
00000002
slu@dev:~
> echo "\\0" | hexdump -C
00000000  00 0a                                             |..|
00000002
slu@dev:~
> echo "\\\0" | hexdump -C
00000000  5c 30 0a                                          |\0.|
00000003
slu@dev:~
> echo "\\\\0" | hexdump -C
00000000  5c 30 0a                                          |\0.|
00000003
slu@dev:~
> echo "\\\\\0" | hexdump -C
00000000  5c 00 0a                                          |\..|
00000003
slu@dev:~
> echo "\\\\\\0" | hexdump -C
00000000  5c 00 0a                                          |\..|
00000003
slu@dev:~
> echo "\\\\\\\0" | hexdump -C
00000000  5c 5c 30 0a                                       |\\0.|
00000004

最大的问题是在bash和zsh上都没有产生所需结果\0的值。

更新:

slu@dev:~
> echo '0' | hexdump -C
00000000  30 0a                                             |0.|
00000002
slu@dev:~
> echo '\' | hexdump -C
00000000  5c 0a                                             |\.|
00000002
slu@dev:~
> echo '\\' | hexdump -C
00000000  5c 0a                                             |\.|
00000002
slu@dev:~
> echo \\ | hexdump -C
00000000  5c 0a                                             |\.|
00000002
slu@dev:~
> echo '\\0' | hexdump -C
00000000  5c 30 0a                                          |\0.|
00000003

看起来使用单引号有助于获得一致的行为。我希望有人能解释一下双引号的行为。


“echo "\"”会输出什么?同时,单引号也值得一试:echo '\0'。 - catholicon
2个回答

3

在使用echo命令时,可以通过使用-E标志来关闭转义处理并使用单引号。

使用echo -E '\0'应该可以在zsh、bash和dash中都输出一个\0


1
这是标准(可移植)的做法:
printf "\0"

无论是哪个(类Unix)操作系统,无论使用什么shell,都应该能够正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接