Bash 中的 bang dollar (!$) 是什么?

What is bang dollar (!$) in Bash?

bang dollar 好像是指最后一行命令行的最后一部分。

例如

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

我可以找到很多关于美元变量的信息(例如 $!),但没有关于这个的信息。有什么解释吗?

这是上一条命令的最后一个参数。来自 documentation:

!!:$

designates the last argument of the preceding command. This may be shortened to !$.

备注。如果你想玩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 ;

还有很多其他示例,例如带有别名的示例。

!$ 可以做 $_ 做的事情,除了 $_ 不存储它的值 returns (作为它的替代)到 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

猴子的回答:

whit !$ 你可以轻松打印前一个命令

最后一个词
#Create new file
touch newfile.txt
#Edit new file using !$ instead newfile.txt again
nano !$