> 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
看起来使用单引号有助于获得一致的行为。我希望有人用双引号解释这种行为。
最佳答案
在带有 -E
标志的 echo 中使用单引号并关闭转义处理。
echo -E '\0'
应该在 zsh 和 bash(和 dash)上生成一个 \0
。
关于linux - 为什么我必须输入 "\\\0"才能在zsh中创建一个字符串 "\0"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980802/