为什么grep“!” 显示“bash: !: event not found”?

use*_*964 4 grep bash special-characters

如果我跑

grep "!" test.txt
Run Code Online (Sandbox Code Playgroud)

它会显示错误

bash: !: 事件未找到

好吧,我知道我实际上应该使用grep '!'. 但是如何理解上面的错误呢?

我知道!是 bash 特殊字符。根据http://mywiki.wooledge.org/Quotes

双引号:"..." 阻止某些替换,但允许其他替换。执行每个以美元符号 $ 开头的替换,以及遗留...(反引号)命令替换。还执行反斜杠转义。不执行分词或文件名扩展。

它没有提到双引号会影响 !。有人可以解释一下 bash 或 grep 是如何解释的grep "!"吗?什么是“事件”?

小智 6

不是grep它造成的。是你bash在解释!. 切换到较新版本的bash或 用于single quotes '!'关闭bash