linux - 为什么我必须输入 "\\\0"才能在zsh中创建一个字符串 "\0"?

标签 linux bash shell unix zsh

> 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/

相关文章:

linux - 当我通过 SSH 在远程计算机上运行 bash 脚本时,如何在本地计算机上发出声音?

c - 如何以编程方式访问 C 中的 bash 命令历史记录?

linux - 使用 sed linux 命令

linux - 如何在 Linux 上检测已知无线设备何时加入我的无线局域网

linux - 如何在 Linux Bash 脚本文件中使用 'sed' 来注释掉带有制表符间距的特定行?

linux - 这是Linux Mono应用程序中的内存泄漏吗?

linux - zsh 中的退格键无法以非常奇怪的方式工作

bash - 为什么 `cat` 在这里列出文件而不是文件内容?

linux - 星号 : command not found

html - 我需要并排记录命令及其输出