我可以用吗 ‘!!’ 在别名或脚本中?

在终端我可以使用!! 这将引用我以前的命令。
是否可以在别名中使用它? 我已经尝试过了,但是会发生双重感叹号的字面解释。

我想要的是:

  1. 我输入一些命令
  2. 我键入了一个别名,其中包含在步骤1中输入的内容

如果有使用脚本的解决方案也是可以接受的。

列出上次执行的命令的命令是fc -nl -1 。 使用输出替换,我们可以向同一内容添加更多参数

 $> ls /etc/passwd /etc/passwd $> $(fc -nl -1) /etc/group /etc/group /etc/passwd $> 

然而,引用可能是这种方法的问题

fc一个非常好的function是,如果你只是自己运行fc命令,它将打开FCEDIT变量中指定的文本编辑器(你可能想要存储在~/.bashrc ),并且该行的内容将是你的最后一个命令。 为了您的方便,我建议您使用nano作为文本编辑器,但如果您知道vim – 甚至更好。

例如,如果我需要编辑qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindow怎么办? 但是使用fc ,我可以打开vim并编辑/org/ayatana/bamf/matcher ,保存,退出并运行。

你不能用!! 但……

从手册 :

与fc命令一起使用的有用别名是r='fc -s' ,因此输入’r cc’运行以cc开头的最后一个命令并输入’r’重新执行最后一个命令。

如果你坚持使用!! 历史扩展语法而不是fc (已经提到),有一种方法。

默认情况下,对于非交互式shell会话(例如脚本)禁用history扩展。

要在脚本中启用历史记录扩展,请首先启用相关的shell选项:

 set -o history set -o histexpand 

set -o histexpand也可以写成set -H

现在的历史扩展操作,例如!! 将在脚本内部工作。