shell 的通配符匹配非常强大,不过也非常危险,不少同学都碰到这样的问题,比如 rm a*,结果一个手抖,a 和星号之间多了个空格,结果目录下的文件都灰飞烟灭了……
bash 支持一个特殊的变量 !$,永远保存着前一条命令的最后一个参数,例如:
$ echo hello world
hello world
$ echo !$
world
hello world
$ echo !$
world
那么,这和防止误操作有什么关系呢?
比如你要删除以 a 打头的文件,可以先通过 ls 确定一下:
$ ls a*
a1.txt a2.txt a3.txt a4.txt
a1.txt a2.txt a3.txt a4.txt
如果确认无误,之后只要:
rm !$
!$ 自动替换为上个命令的 a*,就可以把这些文件干掉了~ 不会再出现手抖打错的情况了,如果通配符确实出了问题,第一步 ls 就可以发现。