铿元似乎指的是上一个命令行的最后一部分。
例如:
$ 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 ;
还有许多其他示例,例如使用别名。
bash -c $'echo hello world\necho !$'
和bash -c $'echo hello world\necho $_'
... 我有一个“快乐”,我有一个“新年”,汉!“新年快乐!”,@gniourf_gniourf! - F. Hauri - Give Up GitHub!$
可以做$_
所能做的事情,除了$_
不能将其返回值(作为其替换项)存储到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
!$
和 $_
不是 同一个东西。!$
在更高的层面上起作用。您可以在别名、复合命令或多个命令中看到其中的区别。在以下情况下比较 echo !$
和 echo $_
:1. { echo zee; }
; 2. if true; then echo one; else echo two; fi
; 3. 还要键入两个命令,例如 echo zee; echo $_
和 echo zee2; echo $!
。 - gniourf_gniourf#Create new file
touch newfile.txt
#Edit new file using !$ instead newfile.txt again
nano !$
!
通常与历史命令有关。 - user2864740