Provided by: manpages-zh_1.5-1_all bug

NAME

       glob - 形成路徑名稱

yz (DESCRIPTION)
       很久以前  在  UNIX  V6 版 中 有一 程式 /etc/glob 用來 展開 通配符模板.
       不久以後 它  成為  shell  內建功能.   現在  人  開發了  類似的  庫函數
       glob(3), 讓 使用者程式 實現 同樣的 功能.

       此 規則 遵循 (POSIX 1003.2, 3.13).

qtt (WILDCARD MATCHING)
       包含  '?',  '*' 或 '[' 字符的 字符串 稱為 通配符模板(wildcard pattern).
       形成路徑名(globbing) 指 一種 操作, 把  通配符模板  展開為  匹配  該串的
       路徑名.  匹配 定義為:

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

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

  r (Character classes)
       對於  表達式  `[...]',  如果  在 第一 '['符 後 出現的 第一 字符 不是
       '!', 則 該 表達式 匹配 任意 一 在 `[...]'內 出現的 字符. 方括弧內 不能
       有  空串,  因此  ']'  可以  作為  第一 字符 出現在 方括弧內. (像 這樣,
       '[][!]' 匹配 下列 三 字符 中的 任意 一, '[', ']' 和 '!'.)

   S(Ranges)
       字符集 有一 特例: 用 '-' 分開的 兩 字符 表示 一  S圍集.   (像  這樣,
       `[A-Fa-f0-9]'  等於  `[ABCDEFabcdef0123456789]'.)  把 '-' 放到 方括弧內
       的 開頭 或 最後 可以 獲得 它的 本意.  (像 這樣, `[]-]' 匹配 ']'和'-' 中
       任意 一. 而 `[--/]' 匹配 `-', `.' 和`/'中 任意 一.)

   (Complementation)
       表達式 '[!...]' 表示 一 字符, 該 字符 不匹配 方括弧內 去掉 開頭 '!' 後
       的 表達式. (像 這樣, `[!]a-]' 匹配 除了 ']', 'a' 和  '-'  的  任意  一
       字符.)

       n  去掉 '?', '*' 和 '[' 的 特殊 含義, 可以 通過 前 加 一 反斜槓; 或者
       在 shell 命令行 中, 通過 引號 來 引用 這些 字符.  在 方括弧內 這些 字符
       顯露出  本意,  所以, '[[?*\]' 匹配 這 四茼r符 中 的 一: '[', '?', '*',
       '\'.

|W (PATHNAME)
       形成路徑名 功能 應用於 路徑 中 的 每一 成部分. 路徑 中 的 '/' 不能 被
       通配符  '?' 或 '*', 或 S圍集 如 '[.-0]' 匹配. S圍集 不能 直接 包含 '/',
       否則 導P 語法錯誤.

       如果 待匹配的 檔名  以'.'開頭,  那麼  這  '.'  字符  必須  直接  給出.
       (比如說, 用 'tar c .' 會 更好.)

C (EMPTY LISTS)
       上z的  簡單優雅 規則, 把 通配符模板 展開為 匹配的 路徑名, 來源於 最初的
       UNIX 定義. 它 允許 展開出 空串, 例如

            xv -wait 0 *.gif *.jpg

       這裏 可能 沒有 *.gif 檔案 (而且 不算 錯誤).

       然而, POSIX n求 句法 錯誤 或 路徑名 列表  為  空  時,  保留  通配符模板
       不變.  (譯注: 即 不展開.)

       在  bash  中 可以 通過 設置 allow_null_glob_expansion=true 把 它 強置為
       傳統的 榆. (其他 地方 也有 類似的 問題, 例如, 老式的 語句 是
            rm `find . -name "*~"`
       新的 寫法 為
            rm -f nosuchfile `find . -name "*~"`
       以 避免 由於 空參數調用 rm 而 產生 錯誤訊息.)

`N (NOTES)
  WF (Regular expressions)
       注意, 通配符模板 不是 正規表達式, 儘管 它 有點像. 漸, 它  匹配  檔名,
       而  不是  正文;  其次,  規則 不一樣, 例如 正規表達式 裏 的 '*' 代表 零-
       茤峖h 前惜漁e的 契_.

       正規表達式 的 方括弧表達式 用 '^'  引導  取反操作,  (而不是  '[!...]').
       POSIX 聲明, 在 通配符模板 中, '[^...]' 未做 定義.

  r M (Character classes and Internationalization )
       當然, S圍集 最初 指 ASCII的 S圍, 因此 '[ -%]' 意思是 '[ !"#$%]',

       一些  UNIX實現  把  這  歸納為:  S圍  X-Y 指 X的編碼 到 Y的編碼 之間的
       編碼字符. 可是, 這 n求 使用者 知道 他 本地系統的 字符編碼, 此外,  如果
       本地的 字母表順序 和 字符集順序 不對應, 那 就 更不方便了.

       因此,  POSIX  對 通配符模板 和 正規表達式 的 方括弧表達法 作了 咫j擴展,
       上 我 知道了 方括弧表達式 中 的  三  類型,  它怓O  (i)  取補集  (ii)
       直接列出的 單茼r符 和 (iii) S圍集.

       POSIX 對 S圍集 在 國際化 方 作了 更有力的 說明, 並且 增加了 三 類型:

       (iii)  S圍  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 第一次莯

mLinuxanhttp://cmpp.linuxforum.net