当上条命令的参数很长,而你需要取用中间的某个参数时,效果就比较明显了。
执行history中的命令
我们都知道可以通过history命令可以查看之前执行过的命令,但是如何再次执行history中的命令呢?我们可以通过“UP”键可以查看,但是历史命令很长的时候,并不是很方便,这个时候“!”便派上了用场:
| $ history (这里省略更多内容) 2043 touch ./dira/testfile 2044 cp -rf dira dirb/ 2045 ls -al dira 2046 ls -l dira 2047 ls -al dira 2048 ls -l dira 2049 ls -al dira 2050 ls -l dira 2051 history |
我们可以看到,history命令出来可以看到之前执行过的命令,也会看到它前面带了一个数值。如果我们想执行前面的cp -rf dira dirb/命令,实际上只要用下面的方式即可:
| $ !2044 #2044是执行的第n条命令 cp -rf dira dirb/ |
即通过![历史命令数值]的方式执行历史命令。
当然了,如果我们想执行倒数第二条命令,也是有方法的:
| $ !-2 #感叹号后面跟着一个负数,负几代表倒数第几条 |
按照关键字执行历史命令
!可以根据关键字执行命令。
执行上一条以关键字开头的命令
例如,执行上一条find命令:
| $ !find #执行上条以find开头的命令 |
执行上一条包含关键字的命令
再例如,执行上一条包含name的命令:
| $ find ./ -name "test" ./test ./find/test $ !?name? find ./ -name "test" ./test ./find/test |
替换上条命令的参数
例如:
| $ find ./ -name "old*" -a -name "*.zip" |
如果我们需要将这条命令中的old更换为new:
| $ !!:gs/old/new |
逻辑非的作用
这个是它最为人所熟悉的作用,例如删除除了cfg结尾以外的所有文件:
| rm !(*.cfg) #删除需谨慎 |
这里就不再详述。
总结
惊叹号”!”的作用确实有时候让人惊叹。前面可能只是提到!结合其他字符代表某个特定的含义的某种使用,实际上,我们可以组合或者扩展发现更多的妙用。这里不再展开。你还有什么好的发现?欢迎留言!
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对易采站长站的支持。








