bash脚本中的双重感叹号

时间:2014-07-27 11:56:38

标签: bash unix

我知道当打印双重感叹号时,它会执行上一个命令。回声!!给出了一些我不理解的奇怪结果。 例如,当在bash脚本中键入下面的命令时,它也会输出echo作为输出的一部分

echo $$
echo !!
This prints the below output:
echo echo $$
echo 3150
(Why does echo precede every output ?)

2 个答案:

答案 0 :(得分:17)

当您使用历史记录替换时,shell首先显示它将要执行的命令,并显示所有替换,然后执行它。这样您就可以看到生成的命令是什么,以确认它是您所期望的。

所以如果你输入:

some command
echo !!

!!将替换为上一个命令的内容。所以它显示然后执行

echo some command

答案 1 :(得分:1)

它是由历史扩张引起的。引用它:

echo '!!'
echo \!\!

或禁用历史记录扩展:

shopt -u -o histexpand  ## Or
set +H

请参阅History Expansion