GLOB(7) Linux Programmer's Manual GLOB(7)

NAME
glob - 形成路径名称

描述 (DESCRIPTION)
很久以前 在 UNIX V6 版 中 有一个 程序 /etc/glob 用来 展开 通配符模板. 不久以后 它 成为 shell 内建功能. 现在 人们 开发了 类似的
库函数 glob(3), 让 用户程序 实现 同样的 功能.

此 规则 遵循 (POSIX 1003.2, 3.13).

通配符匹配 (WILDCARD MATCHING)
包含 '?', '*' 或 '[' 字符的 字符串 称为 通配符模板(wildcard pattern). 形成路径名(globbing) 指 一种 操作, 把 通配符模板 展开为 匹配
该串的 路径名. 匹配 定义为:

不在 方括弧中 的 '?' 匹配 任意 单个 字符.

不在 方括弧中 的 '*' 匹配 任意 字符串, 包括 空串.

字符集 (Character classes)
对于 表达式 `[...]', 如果 在 第一个 '['符 后面 出现的 第一个 字符 不是 '!', 则 该 表达式 匹配 任意 一个 在 `[...]'内 出现的 字符.
方括弧内 不能 有 空串, 因此 ']' 可以 作为 第一个 字符 出现在 方括弧内. (像 这样, '[][!]' 匹配 下列 三个 字符 中的 任意 一个, '[', ']'
和 '!'.)

范围集 (Ranges)
字符集 有一个 特例: 用 '-' 分开的 两个 字符 表示 一个 范围集. (像 这样, `[A-Fa-f0-9]' 等于 `[ABCDEFabcdef0123456789]'.) 把 '-' 放到
方括弧内 的 开头 或 最后 可以 获得 它的 本意. (像 这样, `[]-]' 匹配 ']'和'-' 中 任意 一个. 而 `[--/]' 匹配 `-', `.' 和`/'中 任意
一个.)

补集 (Complementation)
表达式 '[!...]' 表示 一个 字符, 该 字符 不匹配 方括弧内 去掉 开头 '!' 后 的 表达式. (像 这样, `[!]a-]' 匹配 除了 ']', 'a' 和 '-' 的
任意 一个 字符.)

要 去掉 '?', '*' 和 '[' 的 特殊 含义, 可以 通过 前面 加 一个 反斜杠; 或者 在 shell 命令行 中, 通过 引号 来 引用 这些 字符. 在
方括弧内 这些 字符 显露出 本意, 所以, '[[?*\]' 匹配 这 四个字符 中 的 一个: '[', '?', '*', '\'.

路径名 (PATHNAME)
形成路径名 功能 应用于 路径 中 的 每一个 成员部分. 路径 中 的 '/' 不能 被 通配符 '?' 或 '*', 或 范围集 如 '[.-0]' 匹配. 范围集 不能
直接 包含 '/', 否则 导致 语法错误.

如果 待匹配的 文件名 以'.'开头, 那么 这个 '.' 字符 必须 直接 给出. (比如说, ´rm *' 不会 删除 '.profile' 文件, 'tar c *' 不会 打包
你的 所有 文件; 用 'tar c .' 会 更好.)

空列表 (EMPTY LISTS)
上述的 简单优雅 规则, 把 通配符模板 展开为 匹配的 路径名, 来源于 最初的 UNIX 定义. 它 允许 展开出 空串, 例如

xv -wait 0 *.gif *.jpg

这里 可能 没有 *.gif 文件 (而且 不算 错误).

然而, POSIX 要求 句法 错误 或 路径名 列表 为 空 时, 保留 通配符模板 不变. (译注: 即 不展开.)

在 bash 中 可以 通过 设置 allow_null_glob_expansion=true 把 它 强置为 传统的 风格. (其他 地方 也有 类似的 问题, 例如, 老式的 语句 是
rm `find . -name "*~"`
新的 写法 为
rm -f nosuchfile `find . -name "*~"`
以 避免 由于 空参数调用 rm 而 产生 错误信息.)

注意 (NOTES)
正规表达式 (Regular expressions)
注意, 通配符模板 不是 正规表达式, 尽管 它们 有点象. 首先, 它 匹配 文件名, 而 不是 正文; 其次, 规则 不一样, 例如 正规表达式 里 的 '*'
代表 零个或多个 前面内容的 重复.

正规表达式 的 方括弧表达式 用 '^' 引导 取反操作, (而不是 '[!...]'). POSIX 声明, 在 通配符模板 中, '[^...]' 未做 定义.

字符集 和 国际化 (Character classes and Internationalization )
当然, 范围集 最初 指 ASCII的 范围, 因此 '[ -%]' 意思是 '[ !"#$%]','[a-z]' 指所有小写字符.

一些 UNIX实现 把 这个 归纳为: 范围 X-Y 指 X的编码 到 Y的编码 之间的 编码字符. 可是, 这 要求 用户 知道 他们 本地系统的 字符编码, 此外,
如果 本地的 字母表顺序 和 字符集顺序 不对应, 那 就 更不方便了.

因此, POSIX 对 通配符模板 和 正规表达式 的 方括弧表达法 作了 重大扩展, 上面 我们 知道了 方括弧表达式 中 的 三个 类型, 它们是 (i)
取补集 (ii) 直接列出的 单个字符 和 (iii) 范围集.

POSIX 对 范围集 在 国际化 方面 作了 更有力的 说明, 并且 增加了 三个 类型:

(iii) 范围 X-Y 由 X 和 Y 之间 所有的字符 组成 (包括X和Y), X 和 Y 的 当前编码序列 由 当前场合的 LC_COLLATE 分类定义.

(iv) 命名字符集, 象
[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]
因此 可以 用 '[[:lower:]]' 代替 '[a-z]', 它 在 丹麦语 里 同样 有效, 虽然 丹麦的 字母表 里 'z' 后面 还有 三个 字母. 这些 字符集 由
当前场合的 LC_CTYPE 分类定义.

(v) 符号对映, 象 '[.ch.]' 或 '[.a-acute.]', 在 '[.' 和 '.]' 之间的 字符串 是 定义 在 当前场合的 对映元素. 注意 这 可以 是
多字符元素.

(vi) 等类表达式, 象 '[=a=]', 在 '[=' 和 '=]' 之间的 字符串 是 任意 等类 中 的 对映元素, 它 定义在 当前场合. 例如, '[[=a=]]' 可以
等同于 `[a徉溻]' (警告: 这里 有 Latin-1 字符), 也就是 `[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]'.

SEE ALSO
sh(1), glob(3), fnmatch(3), locale(7), regex(7)

[中文版维护人]
徐明 <xuming@iname.com>

[中文版最新更新]
2000/10/15 第一版
2001/11/17 第一次修订

《中国Linux论坛man手册页翻译计划》
http://cmpp.linuxforum.net

man 7 glob的更多相关文章

  1. node - glob模块

    node的glob模块允许你使用 *等符号, 来写一个glob规则,像在shell里一样,获取匹配对应规则的文件. 这个glob工具基于javascript.它使用了 minimatch 库来进行匹配 ...

  2. Linux shell 通配符 / glob 模式

    概念 glob 模式(globbing)也被称之为 shell 通配符,名字的起源来自于 Unix V6 中的 /etc/glob (详见 man 文档).glob 是一种特殊的模式匹配,最常见的是通 ...

  3. php glob()函数实现目录文件遍历与寻找与模式匹配的文件路径

    采用PHP函数glob实现寻找与模式匹配的文件路径,主要讨论glob()函数的作用和用法,利用glob函数读取目录比其它的要快N倍,因为glob函数是内置函数处理起来自然要快. 一,函数原型 arra ...

  4. SQL入门语句之LIKE、GLOB和LIMIT

    一.SQL入门语句之LIKE LIKE用来匹配通配符指定模式的文本值.如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1.这里有两个通配符与 LIKE 运算符一起使用,百 ...

  5. Nodejs:Glob对象

    模块Glob: glob主要用处为筛选文件 API样例: var globInstance = new glob.Glob("@(a|a1|b).js",{nonull:true, ...

  6. glob模块

    Python模块(glob) 主要是用来在匹配文件,相当于在shell中用通配符匹配.  参考:  http://python.usyiyi.cn/python_278/library/glob.ht ...

  7. glob模式

    在学习gulp的过程中,gulp使用了被称作为glob的文件匹配模式. 接下来我们认识下什么是glob模式. 在计算机编程中,特别是类Unix环境,glob模式通过通配符来匹配文件名.例如:Unix命 ...

  8. 实用的PHP功能详解(一)_php glob()用法

    一.使用glob()查找文件 大部分PHP函数的函数名从字面上都可以理解其用途,但是当你看到 glob() 的时候,你也许并不知道这是用来做什么的,其实glob()和scandir() 一样,可以用来 ...

  9. 使用glob()查找文件

    大部分PHP函数的函数名从字面上都可以理解其用途,但是当你看到 glob() 的时候,你也许并不知道这是用来做什么的,其实glob()和scandir() 一样,可以用来查找文件,请看下面的用法:摘自 ...

  10. Python标准库03 路径与文件 (os.path包, glob包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 路径与文件的简介请参看Linux文件系统 os.path包 os.path包主要是 ...

随机推荐

  1. Eclipse安装不了AXIS2 Tool插件,总是找不到axis2 wizards的问题找到解决答案(转载)

    http://blog.csdn.net/downmoon/article/details/7309485 最近在学习axis2工作需要,google一搜,网上到处都是装axis2插件的.根据网上的直 ...

  2. redis 篇 - list

    list 类似于 Python list lpush key value 向列表append value lrange key start stop 获取下标从 start 到 stop 的value ...

  3. IOS - plist使用

    //1 可读取,不可写入工程下的plist文件: //    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"O ...

  4. [AtCoder Grand Contest 024 Problem E]Sequence Growing Hard

    题目大意:考虑 N +1 个数组 {A0,A1,…,AN}.其中 Ai 的长度是 i,Ai 内的所有数字都在 1 到 K 之间. Ai−1 是 Ai 的子序列,即 Ai 删一个数字可以得到 Ai−1. ...

  5. [luogu3195 HNOI2008] 玩具装箱TOY (斜率优化dp)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  6. java实验程序基础中的问题总结 java图形化界面

    一,课程中的问题 1,知道程序实现的大体框架,但是不能具体到每一个细节,这需要平时的积累. 2,在不同文件夹中定义的类之间有没有联系,类与类之间可以通过接口相互联系. 3,如何在一个对话框中显示文本, ...

  7. ARM - Linux嵌入式C/C++各种资料分享【更新日期:2012/04/24】

    http://blog.csdn.net/shuxiao9058/article/details/6786868 由于115网盘取消大众分享功能,因此不能继续分享下载链接.更新资料将在本人分享空间转存 ...

  8. linux中fork()函数详解(搬砖)

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  9. POJ 2230 Watchcow

    Watchcow Time Limit: 3000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 2 ...

  10. echarts 设置x轴的和y轴的属性

    axisLabel:{ interval:0,//横轴信息全部显示 rotate:-30,//-30度角倾斜显示 } splitNumber:10