Bash别名使用!$

时间:2016-05-13 13:35:36

标签: bash

我今天发现我可以写!$来获取最后一个执行命令的最后一个参数。

现在我尝试使用该快捷方式创建别名,但它根本不起作用。

这些是我试图创作的。

alias gal='git add !$'
alias gcl='git checkout !$'
alias sl='sublime !$'

这是调用galgcl

时的结果输出
fatal: pathspec '!$' did not match any files

所以似乎!$不会被这个上下文中最后一个命令的最后一个参数所取代。

有可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用bash内置历史记录命令fc:示例

$ alias re_echo='echo $(fc -ln -2 | awk '\''NR==1 {print $NF}'\'')'
$ echo foo
foo
$ re_echo bar
foo bar
$ re_echo baz
bar baz
$ re_echo qux
baz qux

答案 1 :(得分:2)

您可能还想使用Bash's $_ internal variable而不是摆弄Bash的历史:手册的相关部分说明:

  

$_:[...]扩展后扩展到上一个命令的最后一个参数。 [...]

例如:

$ touch one two three
$ echo "$_"
three
$ ls
$ echo "$_"
ls
$ a='hello world'
$ echo $a
hello world
$ echo "$_"
world
$ echo "$a"
hello world
$ echo "$_"
hello world
$ 

在您的情况下,您的别名将如下所示:

alias gal='git add "$_"'
alias gcl='git checkout "$_"'
alias sl='sublime "$_"'