理解 echo 后面跟着一些感叹号的输出

理解 echo 后面跟着一些感叹号的输出

echo $$前段时间我也在玩。好吧,这显示了 shell 的 pid。但后来我这样做了echo !,很快就显示出来了!然后echo !!制作出

echo echo !
echo !

$echo !!!给了

echo echo echo !!
echo echo !!

我无法理解输出。据我所知,echo !!给出了在 shell 上执行的最后一个命令。但我在这里得到的输出对我来说很奇怪。我使用 bash shell。

答案1

历史事件指示符 !!被您历史记录中的最后一个命令替换。 Bash 首先打印出命令的执行方式,然后执行它。

例子:

$ foo
foo: command not found
$ !!
foo                     # command to be executed
foo: command not found  # result of execution

在你的情况下:

$ echo !
!
$ echo !!
echo echo !         # command to be executed
echo !              # result of execution
$ echo !!!
echo echo echo !!   # command to be executed
echo echo !!        # result of execution

请注意,带有事件指示符的命令不会按键入的方式插入到历史记录中。首先,事件指示符被扩展,然后命令被输入历史记录。这就是为什么在第三个命令(echo !!!)中,事件指示符不是由echo !!(键入的第二个命令)替换,而是由echo echo !(扩展的第二个命令)替换。

这是最后一个命令,其中突出显示了替换的部分:

$ echo (!!)!
echo (echo echo !)! # command to be executed
echo echo !!        # result of execution

答案2

如果你用!!它的话取代的最后一个命令在外壳中,所以第一行是到显示替换 echo echo !第二一个是输出 echo !

相关内容