📅  最后修改于: 2023-12-03 15:13:37.661000             🧑  作者: Mango
在使用 Bash shell 进行命令行操作时,我们经常需要使用历史命令来执行一些重复的操作,或者是重新编辑之前执行过的命令。这时候,Bash 提供了一些常用的历史函数,可以方便我们进行这些操作。
在 Bash shell 中,我们可以通过 history
命令来查看之前执行过的历史命令。这些历史命令都有一个编号,可以通过编号来重新执行它们。
!!
命令!!
命令可以用来重新执行上一条命令,相当于 !-1
命令。
$ ls -l /tmp
$ !! # 重新执行 ls -l /tmp 命令
!n
命令!n
命令可以用来重新执行第 n 条命令,其中 n 是命令的编号。
$ history
1 ls -l /tmp
2 cd /usr/local
3 pwd
$ !2 # 重新执行第二条命令 cd /usr/local
!string
命令!string
命令可以用来重新执行最近一次以字符串 string 开头的命令。
$ history
1 ls -l /tmp
2 cd /usr/local
3 pwd
4 cd /etc
$ !cd # 重新执行最近一次以 cd 开头的命令 cd /etc
!$
命令!$
命令可以用来重新执行上一条命令中的最后一个参数。
$ echo hello world
hello world
$ cat !$ # 重新执行 cat world 命令
除了重新执行历史命令之外,我们还可以对历史命令进行修改,例如修改命令中的参数或者删除一些不需要的命令。
^old^new
命令^old^new
命令可以用来把上一条命令中的 old 替换为 new,并重新执行该命令。
$ ls -l /tmp
$ ^ls^cat # 把上一条命令中的 ls 替换为 cat,并重新执行 cat -l /tmp 命令
!:n
命令!:n
命令可以用来获取上一次执行的命令中的第 n 个参数。
$ ls -l /tmp
$ cat !:2 # 获取上一次执行的命令中的第二个参数 /tmp,并执行 cat /tmp 命令
!:n-$
命令!:n-$
命令可以用来获取上一次执行的命令中从第 n 个参数到最后一个参数的所有参数,并作为新的命令。
$ ls -l /tmp /var
$ cat !:2-$ # 获取上一次执行的命令中从第二个参数到最后一个参数,即 /tmp /var,并执行 cat /tmp /var 命令
!-n
命令!-n
命令可以用来重新执行历史命令中倒数第 n 条命令。
$ history
1 ls -l /tmp
2 cd /usr/local
3 pwd
4 cd /etc
$ !-2 # 重新执行倒数第二条命令 cd /usr/local
!:p
命令!:p
命令可以用来打印出将要执行的命令,但并不执行该命令。
$ ls -l /tmp
$ !!:p # 打印出将要执行的命令 ls -l /tmp,但不执行该命令
这些历史命令和命令修改命令可以让我们更方便地进行命令行操作,大大提高了我们的效率。我们可以通过 man bash
命令来了解更多 Bash shell 中的历史命令和命令修改命令。