该命令echo !"
返回一条错误消息。但命令echo "Hello!"
成功了。使用命令是否正确echo "Hello!"
?
答案1
假设您正在运行 Bash,!
触发器历史扩展。如果它打开,并且您编写eg !echo
,它将被以 开头的最后一个命令替换echo
。该功能最初来自csh,我不知道还有哪些其他shell支持它。
历史扩展不是最聪明的功能,例如!"
会触发它,即使它似乎总是失败(运行"echo" foo
然后尝试!"
仍然失败)。令人烦恼的是,它还会触发内部双引号,例如 in echo "!hello"
。在 Bash 3.2 中,echo "hello!"
也会触发它,但显然这在新版本中发生了变化。
我的建议是关闭它,将set +o histexpand
其set +H
放入 Bash 的启动文件中。