当我在bash中以原始模式阅读时:
read -r v
现在输入5个字符(引号,反斜杠,反斜杠,x,引号):
"\\x"
我做了
echo $v
显示
"\\x"
这就是我的期望:由于-r开关,我得到了我放入的内容。当我在zsh中完全相同时, echo $ v 将显示
"\x"
代替。从联机帮助页 zshbuiltins :
-r:原始模式:`\'在一行的末尾不表示行继续和行中的反斜杠不引用以下字符,并且不会被删除。
所以zsh的行为应该相同,不是吗?在这里吃什么反斜杠是什么意思?
答案 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个字符实际存在。