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 !