当我回显原始变量时,反斜杠在 zsh 中消失
Backslash disappears in zsh when I echo a raw variable
当我在 bash 中以原始模式阅读时:
read -r v
现在输入 5 个字符(引号、反斜杠、反斜杠、x、引号):
"\x"
然后我做了
echo $v
显示
"\x"
这是我所期望的:由于 -r 开关,我取回了我输入的内容。当我在 zsh 中执行完全相同的操作时,echo $v 会显示
"\x"
相反。来自联机帮助页 zshbuiltins:
-r : Raw mode: a `\' at the end of a line does not signify line continuation and backslashes in the line don't quote the following character and are not removed.
所以 zsh 应该表现相同,不是吗?什么在吃我的反斜杠?
反斜杠在输出过程中被移除,而不是在输入过程中。 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 个字符都在那里。
当我在 bash 中以原始模式阅读时:
read -r v
现在输入 5 个字符(引号、反斜杠、反斜杠、x、引号):
"\x"
然后我做了
echo $v
显示
"\x"
这是我所期望的:由于 -r 开关,我取回了我输入的内容。当我在 zsh 中执行完全相同的操作时,echo $v 会显示
"\x"
相反。来自联机帮助页 zshbuiltins:
-r : Raw mode: a `\' at the end of a line does not signify line continuation and backslashes in the line don't quote the following character and are not removed.
所以 zsh 应该表现相同,不是吗?什么在吃我的反斜杠?
反斜杠在输出过程中被移除,而不是在输入过程中。 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 个字符都在那里。