什么是Bash的爆炸美元(!$)?

邦元似乎是指最后一个命令行的最后一部分。

例如

$ ls -l
 .... something
$ !$
-l
bash: -l command not found

我可以在美元变量(例如$! )上找到很多,但不是这样。 任何解释?


这是上一个命令的最后一个参数。 从文档:

!!:$

指定前一个命令的最后一个参数。 这可能会缩短为!$

备注。 如果你想玩Bash的历史,我建议你打开shell选项histverify像这样:

shopt -s histverify

(你也可以把它放在你的.bashrc中)。 在使用历史替换时,替换不会立即执行; 相反,它被放入readline的缓冲区,等待你按下输入...或不!


为了使事情更加精确,输入!$不等于输入"$_"!$实际上是一个历史替换,指的是前一个输入的命令的最后一个单词,而"$_"是先前执行的命令。 你可以比较两者(我有shopt -s histverify ):

$ { echo zee; }
zee
$ echo "$_"
zee
$ { echo zee; }
zee
$ echo !$
$ echo }

也:

$ if true; then echo one; else echo two; fi
one
$ echo "$_"
one
$ if true; then echo one; else echo two; fi
$ echo !$
$ echo fi

并且:

$ echo zee; echo "$_"
zee
zee
$ echo zee2; echo !$
$ echo zee2; echo "$_"

并且

$ echo {1..3}
1 2 3
$ echo "$_"
3
$ echo {1..3}
1 2 3
$ echo !$
$ echo {1..3}

并且

$ echo one ;
$ echo "$_"
one
$ echo one ;
one
$ echo !$
$ echo ;

还有很多其他例子,例如别名。


!$可以做$_所做的事情,除了$_没有将它返回的值(作为其替代)存储到history

这是一个例子。

!$

za:tmep za$ ls -lad 
drwxr-xr-x  4 za  staff  136 Apr  6  2016 .
za:tmep za$ !$
-lad
-bash: -lad: command not found
za:tmep za$ history | tail -n 3
  660  ls -lad 
  661  -lad                     <<== history shows !$ substitution.  
  662  history | tail -n 3

$_

za:tmep za$ ls -lad
drwxr-xr-x  4 za  staff  136 Apr  6  2016 .
za:tmep za$ $_
-bash: -lad: command not found
za:tmep za$ history | tail -n 3
  663  ls -lad
  664  $_         <<== history shows $_ and not its substitution. 
  665  history | tail -n 3
za:tmep za$ 

更多的选择:

!^      first argument
!:2     second argument
!:2-$   second to last arguments
!:2*    second to last arguments
!:2-    second to next to last arguments
!:2-3   second to third arguments
!$      last argument
!*      all arguments
链接地址: http://www.djcxy.com/p/25321.html

上一篇: What is bang dollar (!$) in Bash?

下一篇: Jenkins SSH shell closes before executing remote commands