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

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

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

slu@dev:~
> echo ""

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

$ echo ""

$ echo ""

我得说,bash的行为对我来说更有意义。

更多细节:

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

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

更新:

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 '' | hexdump -C
00000000  5c 30 0a                                          |.|
00000003

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


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

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


这是标准(可移植)的方式来做到这一点:

printf ""

无论使用什么shell(Unix类似),都应该可以工作。

链接地址: http://www.djcxy.com/p/70867.html

上一篇: Why must I enter "\\\0" to create a string "\0" in zsh?

下一篇: Is there any algorithm for bulk loading in B