!$ 在 Bash 脚本中是什么意思?

!$ 在 Bash 脚本中是什么意思?

在阅读脚本内容时,我发现类似这样的内容:

echo "An Example" > !$

所以我想知道!$bash 中的意思是什么。

答案1

来自man bash(第 3813 行之后的某个地方):

!      Start  a  history substitution, except when followed by a blank,
          newline, carriage return, = or ( (when the extglob shell  option
          is enabled using the shopt builtin).

[...]

$      The  last  word.   This  is  usually the last argument, but will
          expand to the zeroth word if there is only one word in the line.

因此,!$将从历史记录中调用最后一条命令的最后一个参数。

以下是一些示例和等价物:

$ echo foo bar
foo bar
$ echo !$ # recall the last argument from the last command from history
echo bar
bar

$ echo foo bar
foo bar
$ echo !:$ # the same like `!$'
echo bar
bar

$ echo foo bar
foo bar
$ echo !:2  # recall the second (in this case the last) argument from the last command from history
echo bar
bar

$ echo foo bar
foo bar
$ echo $_ # gives the last argument from the last command from history
bar

$ echo foo bar
foo bar
$ echo Alt+. # pressing Alt and . (dot) in the same time will automatically insert the last argument from the last command from history
bar

$ echo foo bar
foo bar
$ echo Alt+_ # the same like when you press Alt+.
bar

$ echo foo bar
foo bar
$ echo Esc. # the same like when you press Alt+.
bar

所有这些都只能在交互式外壳。但是如果你在脚本中使用问题中的命令,就像你说的那样,那么事情就不同了:当你运行脚本时,它将在一个新的 shell 中启动,一个非交互式shell,所以历史扩展在这种情况下没有任何效果,因此命令:

echo "An Example" > !$

!$如果不存在则创建文件(否则覆盖它)并写入An Example其中。

答案2

我发现 !$ 意味着最后一个参数举个例子:

touch /tmp/file1

这里的论点是/tmp/文件1, 所以!$/tmp/file1在回声示例中被替换。

如果您输入该命令du -b !$,则输出将是磁盘使用情况(以字节为单位)/tmp/file1

相关内容