4.3 shell的文件通配符处理
- 星号 *
- 匹配任意长度的文件名字符串(包括空字符串)
- 点字符(.),当它作为文件名或路径名分量的第一个字符时,必须显式匹配
- 斜线(/)也必须显式匹配
- 例:*file匹配file,makefile,不匹配.profile文件
try*c 匹配try1.c try.c try.basic
- 问号 ?
- 匹配任一单字符
- 方括号 [ ]
- 匹配括号内任一字符,也可以用减号指定一个范围
- 例: [A-Z] .[ch] [Mm]akefile//注意没有,、等来分割[]中的字符!
- 注意
- 文件名通配符规则与正则表达式的规则不同,应用场合不同
- 不同种类shell通配符规则会略有些差别
4.3.1shell与kernel
- shell
- shell是一个用户态进程
- 对用户提供命令行界面
- 使用操作系统核心提供的功能
- kernel:操作系统核心
- 管理系统资源(包括内存,磁盘等)运行在核心态
- 通过软中断方式对用户态进程提供系统调用接口
4.3.2main的两个参数
main(int argc, char *argv[]
4.3.3 文件名通配符
- 文件名通配符的处理由shell完成,分以下三步
- 在shell提示符下,从键盘输入命令,被shell接受
- shell对所键入内容作若干加工处理,其中含有对文件通配符的展开工作(文件名生成),生成结果命令
- 执行前面生成的结果命令
【坑爹的例子】
- 设当前目录下只有try.c,zap.c,arc.c三文件
- 键入内容 cat *.c
- 实际执行 cat arc.c try.c zap.c (按字典序)
- 对命令cat来说,指定了3个文件
- grep a.c try.c与grep 'a.c' try.c的区别
- 设当前目录下有a1.c和a2.c
- 前者实际执行grep a1.c a2.c try.c
- 在a2.c和try.c中查找正则表达式a1.c
- 后者在try.c文件中查找正则表达式a*.c