终端用命令替换 ! 后跟数字

终端用命令替换 ! 后跟数字

我对我的 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 !!就可以了。

仅反斜杠 (\) 和单引号可以引用历史扩展字符。

为了避免历史记录扩展,您需要使用反斜杠 ( ) 转义感叹号\!或使用单引号 ( '!')。

相关内容