什么是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