我对我的 ubuntu 终端会话感到非常困惑,它似乎用看似随机的命令替换了以 开头、!
后跟数字的命令中的部分。它用!87
和 替换它screen -l
,还用!88
替换它ls
。
如果您能告诉我为什么会发生这种情况,我们将非常感激。
答案1
这是bash
历史扩展,例如
!87
从历史行重新执行命令87
。
您可以在以下位置找到此功能的描述man bash
,“历史扩展”部分:
An event designator is a reference to a command line entry in the
history list. Unless the reference is absolute, events are relative to
the current position in the history list.
! Start a history substitution, except when followed by a blank,
newline, carriage return, = or ( (when the extglob shell option
is enabled using the shopt builtin).
!n Refer to command line n.
!-n Refer to the current command minus n.
因此,要快速调用最后一个命令,请执行 ,!-1
然后执行倒数第五个命令!-5
。 的一个方便的同义词!-1
是!!
– 如果您调用例如apt install something
但忘记了sudo
,只需执行sudo !!
就可以了。
仅反斜杠 (\) 和单引号可以引用历史扩展字符。
为了避免历史记录扩展,您需要使用反斜杠 ( ) 转义感叹号\!
或使用单引号 ( '!'
)。