2016-05-13 68 views
4

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

现在我试图创建一个使用该快捷方式的别名,它根本不工作。

这些是我正在尝试创建的。

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

这是结果输出调用galgcl

fatal: pathspec '!$' did not match any files 

时,所以它看起来像!$只是没有被从最后的命令在这种情况下的最后一个参数所取代。

可能吗?

+6

由于猛砸扩展'$',有没有办法可以是“存储”在稍后使用的地方。我认为说'alias gal =“git add”'会更有意义,然后用'!$'调用它 - >'gal!$'。 – fedorqui

+0

@fedorqui这绝对是最好的选择。 – 123

+1

为什么你不使用变量['$ _'](http://www.gnu.org/software/bash/manual/bashref.html#index-_0024_005f)? –

回答

2

而是使用bash的历史摆弄的,你还不如想使用Bash's $_ internal variable:手动状态的相关部分:

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

例如:

$ 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 "$_"' 
2

你可以使用bash的内置history命令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 
+0

不应该是'-1',否则你以前会输出两个命令? – 123

+0

我也这么认为,但后来我对它进行了测试,结果发现,使用“-1”时,使用了* current *命令的最后一个字。我想知道在执行fc的时候别名是否已经在历史堆栈上?不知道。 –