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

Ahm*_*kan 6 zsh

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

$ echo --message="foo!"
dquote>
Run Code Online (Sandbox Code Playgroud)

这不会发生在 bash 中。

当我!从参数中删除字符时,它工作正常:

$ echo --message="foo"
--message=foo
Run Code Online (Sandbox Code Playgroud)

这里发生了什么事?


我还应该注意,如果我回答未终止的引用提示"并点击返回,我会得到这个输出,它完全删除!

$ echo --message="foo!"
dquote> "
--message=foo
Run Code Online (Sandbox Code Playgroud)

mos*_*svy 11

这就是工作中的历史扩展。

这是zshexpn(1)联机帮助页的说明:

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