当我回显原始变量时,反斜杠在zsh中消失

时间:2015-01-27 12:12:28

标签: zsh

当我在bash中以原始模式阅读时:

read -r v

现在输入5个字符(引号,反斜杠,反斜杠,x,引号):

"\\x"

我做了

echo $v

显示

"\\x"

这就是我的期望:由于-r开关,我得到了我放入的内容。当我在zsh中完全相同时, echo $ v 将显示

"\x"

代替。从联机帮助页 zshbuiltins

  

-r:原始模式:`\'在一行的末尾不表示行继续和行中的反斜杠不引用以下字符,并且不会被删除。

所以zsh的行为应该相同,不是吗?在这里吃什么反斜杠是什么意思?

1 个答案:

答案 0 :(得分:2)

在输出过程中,在输入期间不会删除反斜杠。 zsh的内置echo默认情况下会对转义序列进行评估。可以使用-E命令行选项或设置BSD_ECHO shell选项来防止这种情况:

% read -r v
"\\x"
% echo $v
"\x"
% echo -E $v
"\\x"
% setopt BSD_ECHO
% echo $v
"\\x"
% echo $#v
5

最后一行打印v中字符串的长度,显示所有5个字符实际存在。