Bash的基本特性之文件名通配globbing

文件名通配属于 Bash 的一大特性,通配符只会出现在命令的参数中。当参数中出现了通配符时,shell 将会把他当做路径或文件名去文件系统做匹配,如果符合要求的匹配存在则进行替换,否则这个通配符就只是当做普通字符传递给命令,然后交给命令处理。

常见的文件名通配符

字符 含义
* 任意长度的任意字符
任意单个字符
~ 当前用户的家目录
~user1 用户user1的家目录
~- 上一个工作目录
~+ 当前工作目录
[] 列表中的任意单个字符
[^] 列表中的所有字符以外的字符
[0-9] 任意单个数字
[a-z] 小写字母
[A-Z] 大写字母
[0-9a-Z] 大小写字母及数字
[:lower:] 任意小写字母
[:upper:] 任意大写字母
[:alpha:] 任意大小写字母
[:alnum:] 任意数字或字母
[:space:] 空格
[:punct:] 标点符号
[:digit:] 任意单个数字,同 [0-9]

示例

1
2
3
4
5
6
7
8
9
[user1@study ~]$ ls
file2.txt file3.txt file.bak nginx1.log nginx2.log nginx3.log nginx4.log nginx5.log
[user1@study ~]$ ls *.txt
file2.txt file3.txt
[user1@study ~]$ ls nginx*
nginx1.log nginx2.log nginx3.log nginx4.log nginx5.log
[user1@study ~]$ ls nginx[1-3]*
nginx1.log nginx2.log nginx3.log
[user1@study ~]$

注意: 通配符看起来和正则表达式十分相似,但是这两个是完全不同的,不能相互混淆。

参考: https://www.w3resource.com/linux-system-administration/file-globbing.php

有钱任性,请我吃包辣条
0%