bash脚本中的双重感叹号

Sam*_*Sam 16 unix bash

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

echo $$
echo !!
This prints the below output:
echo echo $$
echo 3150
(Why does echo precede every output ?)
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 18

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

所以,如果你输入:

some command
echo !!
Run Code Online (Sandbox Code Playgroud)

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

echo some command
Run Code Online (Sandbox Code Playgroud)

  • 它打印将要执行的命令。`!!` 被替换为之前的命令。 (2认同)

kon*_*box 5

这是由历史扩展造成的。而是引用它:

echo '!!'
echo \!\!
Run Code Online (Sandbox Code Playgroud)

或者禁用历史扩展:

shopt -u -o histexpand  ## Or
set +H
Run Code Online (Sandbox Code Playgroud)

请参阅历史扩展