linux下的命令行通配符总结

时间:2021-03-03 14:30:25
我们想对一类文件批量操作,例如批量查看硬盘文件属性,那么正常命令会是:
[root@linuxprobe ~]# ls /dev/sda
[root@linuxprobe ~]# ls /dev/sda1
[root@linuxprobe ~]# ls /dev/sda2
[root@linuxprobe ~]# ls /dev/sda3

但有些时候确实不知道分区的个数或分区号,这时候就要用到通配符来搞定了,Bash解释器的支持多种文本


通配符包括:
通配符 含义
* 匹配零个或多个字符。
? 匹配任意单个字符。
[0-9] 匹配范围内的数字。
[abc] 匹配已出的任意字符。

查看sda开头的所有设备文件:
[root@linuxprobe ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2

查看sda后面有一个字符的设备文件:
[root@linuxprobe ~]# ls /dev/sda?
/dev/sda1 /dev/sda2

查看sda后面包含0-9数字的设备文件:
[root@linuxprobe ~]# ls /dev/sda[0-9]
/dev/sda1 /dev/sda2

查看sda后面是135的设备文件:
[root@linuxprobe ~]# ls /dev/sda[135]
/dev/sda1


另外bash解释器还支持很多的特殊字符扩展:
字符 作用
\(反斜杠) 转义后面单个字符
''(单引号) 转义所有的字符
""(双引号) 变量依然生效
``(反引号) 执行命令语句

定义名称为PRICE的变量值为5
[root@linuxprobe ~]# PRICE=5
想要输出”价格是5″:
[root@linuxprobe ~]# echo "Price is $PRICE"
Price is 5
想要输出”价格是$5″,但因为美元符号与代表变量取值的$符号冲突了,所以报错了:
[root@linuxprobe ~]# echo "Price is $$PRICE"
Price is 3767PRICE
添加一个反斜杠,将第一个$符号转义:
[root@linuxprobe ~]# echo "Price is \$$PRICE"
Price is $5
使用单引号,变量将不再被取值:
[root@linuxprobe ~]# echo 'Price is \$$PRICE'
Price is \$$PRICE
执行uname -a后可以查看到本机内核的版本与架构信息(反引号里面的命令会被执行):
[root@linuxprobe ~]# echo `uname -a`
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux