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. npm run eject 命令后出现This git repository has untracked files or uncommitted changes错误

    npm run eject 暴露隐藏的文件,不可逆 结果出现下面的问题 This git repository has untracked files or uncommitted changes: ...

  2. 密信(Mesince)首创全自动邮件加密,颠覆传统邮件加密软件

    电子邮件泄密已经成为一个全球性的日益严峻的安全问题,解决这个问题的唯一有效办法就是电子邮件内容先加密后发送.然而,使用基于S/MIME标准的传统邮件加密软件进行邮件加密,需要用户具备一定的技术基础.用 ...

  3. 更新GitHub的仓库

    在GitHub上仓库已经存在且提交过,本地仓库部分更新后推送至GitHub仓库 添加,提交至本地仓库 将改动文件添加并提交到仓库 Roc@DESKTOP-AF552U2 MINGW64 /e/note ...

  4. 通过页面预加载(preload)提升小程序的响应速度

    GitHub: https://github.com/WozHuang/mp-extend 主要目标 如果小程序在打开新页面时需要通过网络请求从接口中获取所用的数据,在请求完成之前页面都会因为没有数据 ...

  5. Vue系列(二):发送Ajax、JSONP请求、Vue生命周期及实例属性和方法、自定义指令与过渡

    上一篇:Vue系列(一):简介.起步.常用指令.事件和属性.模板.过滤器 一. 发送AJAX请求 1. 简介 vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 ...

  6. 小学生都能学会的python(闭包和迭代器)

    小学生都能学会的python(闭包和迭代器) 1. 函数名第一类对象 函数名其实就是变量名 1). 可以像变量一样互相赋值. 2). 可以作为函数的参数,进行传递 3). 可以作为返回值返回 4). ...

  7. JavaScript 实现简单的 弹出框关闭框

    JavaScript 实现简单的 弹出框关闭框 知识点: 1.javaScript 添加HTML标签 2.javaScript 添加HTML标签属性 3.javaScript 追加元素 代码献上: & ...

  8. 《一个民企CEO的职场阳谋》–读书总结(上)

    职场是一个战场,很多人几十年在这里战斗. 职场是一个熔炉,很多人大半生在这里修炼. 如果在办公室里得不到快乐,生活就不会快乐. 如果公司里头感觉不到幸福,人生就不会幸福.(以上四句来自老刘的博客) & ...

  9. 使用 Xshell 连接 linux 系统

    一.下载 Xshell 链接:https://pan.baidu.com/s/1htwqpzm 密码:zau7 二.安装 Xshell 无脑下一步就可以了 三.连接 linux 四.安装 Xftp h ...

  10. Windows系统环境变量、JAVA环境变量配置以及JVM加载过程

    一:用户变量和系统变量的区别 右击我的电脑.属性.高级系统设置.环境变量. 对话框的上面为Administrator的用户变量,对话框的下面为系统变量.我们所说的环境变量一般指系统环境变量,对所有用户 ...