3. 方括号 ([]) 字符
方括号 ([] ) 字符表示单个字符位置的一组或者一系列字符。
一组字符是任意数量的特定字符,例如 [acb]。
集合中的字符不必按任何顺序排列。
例如,[abc] 与 [cab] 相同。字符范围是一系列有序字符。
范围列出第一个字符,后跟连字符 (-),然后是最后一个字符,例如 [a-z] 或者 [0-9]。
指定范围时,请按照我们希望它们在输出中出现的顺序排列字符。
例如,使用 [A-Z] 或者 [a-z] 分别搜索任何大写或者小写字母字符。
例如,列出以字母 a 到 f 开头的所有文件和目录。
$ ls [a-f]* brands dante_1 file.1 file2 file4 celery feathers file1 file.3 fruit dante feathers_6 file.2 file3 fruit2
例如,列出所有以字母 f 或者 p 开头的文件和目录。
$ ls [fp]* perm file.1 file.2 file.3 file4 fruit2 feathers_6 file1 file2 file3 fruit
2. 问号 (?) 字符
问号 (?) 字符也称为通配符,表示隐藏文件的前导句点 (.) 之外的任何单个字符。
例如,列出以字符串 dir 开头并后跟另一个字符的所有文件和目录。
$ ls dir? dir1: coffees fruit trees dir2: beans notes recipes
如果没有文件与使用问号 (?) 字符的条目匹配,则会出现错误消息。
$ ls z? z?: No such file or directory
shell 扩展
在 shell 中工作时,信息的集合或者范围经常重复。
Shell 扩展有助于使用紧凑语法生成大量 Shell 标记。
将命令拆分为令牌后,在命令行上执行扩展。
在许多可用的扩展中,路径名、文件名和大括号扩展在前面进行了解释。
大括号扩展
大括号 {} 扩展是一种可以生成任意字符串的机制。
要大括号扩展的模式采用可选前导码的形式,后跟一系列逗号分隔的字符串或者一对大括号之间的序列表达式,后跟可选的后记。
大括号内包含的每个字符串都以前导码“a”为前缀,然后将后缀“e”添加到每个结果字符串,从左到右扩展。
$ echo a{d,c,b}e ade ace abe
路径名扩展
路径名扩展简化了目录层次结构中的位置更改。
路径名扩展包括:
- 波浪号(~)字符,代表当前用户家目录的绝对路径名
- 波浪号 (~) 字符和用户名,代表指定用户的主目录
- 破折号 (-) 字符,代表上一个工作目录
注意:波浪号 (~) 字符在除 Bourne shell 之外的所有 shell 中都可用。
对于每个扩展字符,请考虑以下示例:
- 使用波浪号 (~) 字符将目录更改为 dir1.
$ cd ~/dir1 $ pwd /home/user/dir1/
- 使用波浪号 (~) 字符后跟用户名将目录更改为用户主目录。
$ cd ~user $ pwd /home/user
- 使用 - 扩展字符在 user 和 tmp 目录之间切换。
$ cd $ pwd /home/user
$ cd /tmp $ pwd /tmp
$ cd /export/home/user1 $ cd /tmp
文件名扩展
文件名扩展是:
- 星号 (*) 字符
- 问号 (?) 字符
- 方括号 ([]) 字符
1. 星号 (*) 字符
星号 (*) 扩展字符也称为通配符,代表零个或者多个字符,隐藏文件的前导句点 (.) 除外。
例如,列出所有以字母 f 开头、后跟零个或者多个其他字符的文件和目录。
$ ls f* file.1 file.2 file.3 file4
另一个例子是列出所有以数字 3 结尾的文件和目录,前面有零个或者多个字符。
$ ls *3 file.3 file3