3.7 快速引用上一条命令的参数
很多时候,我们即将执行的命令与之前的命令具有相同的参数,比如同样的文件名、路径名等等。所以,我们在执行新的命令时无需重新输入这些同样的参数,只要直接从其引用过来即可。
3.7.1 引用最后一位参数
我最常用的是 !$
,它允许我直接复用上一条命令的最后一位参数。当我用 mkdir
创建目录后,使用它来立即转到该目录:
这里,cd
命令后的 !$
等同于上一条命令中的 videos
。
3.7.2 引用最开头的参数
与最后一位参数相反,!^
能够让我们引用上一条命令中最开头的参数。这里的 ^
和 $
与正则表达式中的锚点类似。请看例子:
在该例中,!^
相当于上一条命令中的路径 /usr/share/doc
。
3.7.3 引用所有参数
不光是开头或结尾的参数,有时候我们想要引用的是上一条命令的所有参数。此时,我们可以使用 !*
,这里的 *
意为全部。比如:
cp
命令中的 !*
跟 src code
同样,它表示两个参数都要引用。
3.7.4 引用第 n 个参数
对于引用上一条命令中的参数,我们甚至可以要求 Shell 精确到具体的第几个。因为 Shell 按照空白来解析命令行,所以它给命令本身编号为 0,后续的选项和参数按 1、2、3 等依次编号。如图 3.3 所示。这就好比程序中的数组一样。在下面的例子中,假如我们想要引用 bar.txt
,除开 touch
,按顺序它应该是第 2 个参数,因此可以像这样表示:
nvim
命令中的 !:2
就相当于上一条命令中的 bar.txt
文本文件。
3.7.5 引用从 m 到 n 的参数
还有一种情况可能会遇到,即同时引用上一条命令的好几个参数。此时,我们可以使用 !:m-n
表示法,m
为开始端,n
为结束端。我们继续以上例来说明:
这里的 !:1-2
让我们引用 touch
命令中的前两个参数。