Linux 系统中,“!” 符号或者操作符通常被用做逻辑否定的操作符,同时也通过一些调整和改动命令来从历史记录中找出你需要的命令行。
那么现在就让我们学习一下 “!” 这神奇而独特的用法吧!
从历史记录中使用命令号来运行命令
我们都知道可以通过history命令可以查看之前执行过的命令,但是如何再次执行history中的命令呢?我们可以通过“UP”键可以查看,但是历史命令很长的时候,并不是很方便,这个时候“!”便派上了用场
要查看最近用过的命令列表,可以输入不带选项的histroy命令。
![](https://img.haomeiwen.com/i22280945/5ad8c957b5eb8c42.png)
信息只截屏一小部分。这时你可以通过命令 history 的输出中的命令序号来执行一条命令。例如:
!11
![](https://img.haomeiwen.com/i22280945/d90de8c16d9d2315.png)
上面可以看到它执行了号码为!11的 yum install brew 命令,这种执行方式对执行某些特别长的命令非常有用,你只要使用”!”符号加上命令的序号就能执行该命令啦。
你可以运行 !-1、!-2 等命令来执行你记录序列中的倒数第一条命令、倒数第二条命令。和上面的操作流程一样,你需要先用 history 命令来列出命令列表。
使用上条命令最后一个参数
比如,你在使用ls列出目录内容时,没有带任何参数,但是想再次执行,带上-al参数,又不想输入长长的参数,可以使用下面的方式:
![](https://img.haomeiwen.com/i22280945/0dd5aa874c7095c8.png)
![](https://img.haomeiwen.com/i22280945/ae47ea8b118c4164.png)
这里的!$代表了上一条命令的最后一个参数。
使用上条命令第一个参数
而使用上条命令的第一个参数只需要使用!^,例如:
![](https://img.haomeiwen.com/i22280945/ff34152d318a29e5.png)
通过关键词来执行之前的命令
我们可以通过执行关键词来执行之前的命令。可以按照下面的命令来理解:
ls /home > /dev/null
ls -l /home/minger/share
上面是相同的ls命令对应了不同参数和文件夹。
此外我们将每一个标准输出都传递到了 ”/dev/null”因为我们并不希望处理程序的标准输出。现在我们可以调用命令的关键词来实现它们。例如:
![](https://img.haomeiwen.com/i22280945/194612bbdb90281c.png)
使用 !(文件名) 的方式来避免命令对某个文件的影响
这里的 “!” 符号相当于逻辑否定来使用,用来避免对加了 “!” 前缀的文件产生影响。
从目录中删除除 file.txt 外的所有文件:
rm !(file.txt)
从目录中删除 pdf 为后缀以外的文件:
rm !(*.pdf)
删除需谨慎,这里就不再详述。
总结
history命令是bash shell 内置命令,history命令有助于我们缩短输入命令的时间,达到节省命令快捷操作的要求。
而惊叹号"!"的作用确实有时候让人惊叹。前面可能只是提到!结合其他字符代表某个特定的含义的某种使用。本文只是简单介绍一些妙用,欢迎补充!
参考:https://linuxstory.org/mysterious-ten-operator-in-linux/
![](https://img.haomeiwen.com/i22280945/ff551a5e9e4b3d04.png)
欢迎关注公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:
![](https://img.haomeiwen.com/i22280945/dc5bbea6c57f3525.png)
网友评论