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 !$
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 !$