如果前面有感叹号 (!),ZSH 认为未终止的引用

如果前面有感叹号 (!),ZSH 认为未终止的引用

我有 zsh 5.3 (通过 oh-my-zsh),如果我运行echo --message="foo!",我会在下一行得到未终止的引用提示:

$ echo --message="foo!"
dquote>

这不会发生在 bash 中。

当我!从参数中删除该角色时,它工作正常:

$ echo --message="foo"
--message=foo

这里发生了什么事?


我还应该注意,如果我回答未终止的引号提示并按"回车键,我会得到此输出,这完全删除了!

$ echo --message="foo!"
dquote> "
--message=foo

答案1

这就是历史扩展在起作用。

zshexpn(1)联机帮助页对此是这样描述的:

如果 shell 遇到!"输入中的字符序列,则历史记录机制会暂时禁用,直到 zshmisc(1)完全解析当前列表(请参阅 参考资料)。将从!"输入中删除,任何后续!字符都没有特殊意义。

相关内容