Bang dollar似乎是指最后一个命令行的最后一部分。
EG
$ ls -l
.... something
$ !$
-l
bash: -l command not found
我可以在美元变量(例如$!
)上找到很多但不是这个。任何解释?
这是上一个命令的最后一个参数。来自documentation:
!!:$
指定前一个命令的最后一个参数。这可以缩短为
!$
。
备注。如果你想玩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
猴子的答案:
whit!$你可以轻松打印上一个命令的最后一个单词
#Create new file
touch newfile.txt
#Edit new file using !$ instead newfile.txt again
nano !$