为什么 `!45` 被替换为 `top`?

Cha*_*son 5 bash command-history search

我试图在 Ubuntu 12.04 中进行字符串搜索,如下所示:

find . -exec grep -l "!45" {} \;

它没有搜索字符串“!45”,而是替换为top. 它没有调用命令,而只是开始搜索术语“top”。在我弄清楚-Ffor 之前grep,我认为特殊字符会被视为引号之间的文本。

任何人,现在我发现了这个,我不知道这是什么,它的用途,或者它为什么存在!

Eig*_*ony 9

在 bash shell 中,!45从命令历史记录(或!32!873)返回该命令。

事件指示符是对历史列表中命令行条目的引用。除非引用是绝对的,否则事件是相对于历史列表中的当前位置的。

开始历史替换,除非后跟空格、制表符、行尾、“=”或“(”(当使用 shopt 内置选项启用 extglob shell 选项时)。

!n

请参阅命令行 n。

在此处查看 bash 手册中的完整详细信息。

  • 多年来一直在使用 bash,但从来不知道这种扩展 - 所以我们今天都学到了一些有用的东西!这就是我喜欢在 StackExchange 上回答问题的原因。 (2认同)
  • @hydroparadise:为您辩护,bash 手册页是*巨大的*。 (2认同)