首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么必须输入"\0“才能在zsh中创建字符串”\0“?

为什么必须输入"\0“才能在zsh中创建字符串”\0“?
EN

Stack Overflow用户
提问于 2013-04-13 05:04:01
回答 2查看 282关注 0票数 7
代码语言:javascript
复制
> 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的行为对我来说更有意义。

更多详细信息:

代码语言:javascript
复制
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的值。

更新:

代码语言:javascript
复制
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

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

EN

回答 2

Stack Overflow用户

发布于 2013-04-13 05:16:54

使用单引号,并使用-E标志关闭echo中的转义处理。

echo -E '\0'应该在zsh和bash (和破折号)上生成一个\0

票数 3
EN

Stack Overflow用户

发布于 2013-04-13 05:27:23

这是标准的(可读便携的)方法:

代码语言:javascript
复制
printf "\0"

不管是什么(Unix )操作系统,不管是什么shell,都应该能正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15980802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档