今日では、この機能をユーザープログラムからも実行できるよう、 glob(3) というライブラリルーチンも存在している。
glob の規則を以下に述べる (POSIX.2 3.13)。
(ブラケット外部の) aq?aq はあらゆる単一の文字にマッチする。
(ブラケット外部の) aq*aq はあらゆる文字列にマッチする。 空文字列 (empty string) にもマッチする。
文字クラス (character class)
"[...]" と言う表記は、先頭の aq[aq に続く最初の文字が aq!aq で なければ、ブラケットの中に含まれている文字のどれか一つにマッチする。 ブラケットの内部に含まれる文字列は空であってはならない。 したがって aq]aq も最初の文字に指定すればブラケットの内部に含めることが できる (つまり "[][!]" は aq[aq, aq]aq, aq!aq の 3 文字のどれかにマッチする)。
領域指定 (range)
特殊な表記法が一つ存在する。aq-aq を挟む二つの文字は領域指定となる。 (つまり "[A-Fa-f0-9]" は "[ABCDEFabcdef0123456789]" と等価となる。) aq-aq 文字そのものを入れたい場合は、 ブラケットの先頭または最後の文字に指定すればよい。 (つまり "[]-]" は二つの文字 aq]aq と aq-aq にマッチし、"[--0]" は aq-aq, aq.aq, aq0aq の 3 文字にマッチする。この間の aq/aq にはマッチしない。後述を参照。)
補集合 (complementation)
"[!...]" と言う表記は、ブラケットの内部に含まれない単一の文字にマッチする (ただし先頭にある aq!aq は除外)。 (つまり "[!]a-]" は aq]aq, aqaaq, aq-aq 以外のすべての文字の、どれか一つにマッチする。)
バックスラッシュ aq\aq を前置すれば、 aq?aq, aq*aq, aq[aq は通常の文字として扱われる。 またはシェルのコマンドラインの一部に指定する場合は、 クォートで囲っても同じ効果が得られる。ブラケットの内部では、 これらの文字はその文字自身だけを意味する。 すなわち "[[?*\]" は aq[aq, aq?aq, aq*aq, aq\aq のどれか一文字にマッチする。
aq.aq で始まるパス名では、この文字は陽にマッチさせなければならない。 (つまり rm * は .profile を削除しない。また tar c * ではすべてのファイルはアーカイブされない。 tar c . の方が良い。)
xv -wait 0 *.gif *.jpgにおいて、*.gif ファイルが全くない場合でも、 これは空のリストに展開されるため、エラーにならない。 しかし POSIX では、文法的に正しくないパターンや、 マッチがなかったパターンは、 そのまま変更されずに残されることになっている。 bash では allow_null_glob_expansion=true を指定することで、以前の振る舞いに設定することができる。
(同様の問題は別のところでも起こっている。例えば、古いスクリプトにおける
rm `find . -name "*~"`のような記述は、新しいスクリプトでは
rm -f nosuchfile `find . -name "*~"`のようにしなければならない。さもないと rm を引き数リストなしで呼び出す可能性があり、 エラーメッセージが出てしまう。)
正規表現にもブラケット表現はあるが、否定は aq^aq でなされる。 POSIX ではワイルドカードパターンにおける "[^...]" を未定義であるとしている。
(iii) 領域指定 X-Y は X と Y に挟まれた (両端含む) すべての文字を意味する。 このとき、カレントロケール (current locale) の LC_COLLATE カテゴリで定義されている照合順序が用いられる。
(iv) 名前付き文字クラス: 以下のようなものである。
[:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]これを用いれば "[a-z]" の代わりに "[[:lower:]]" のような指定ができる。 またデンマークのように、アルファベットの aqzaq 以降に 3 つの文字が存在するような場合でも、同じような動作が期待できる。 これらの文字クラスはカレントロケールの LC_CTYPE カテゴリで定義されている。
(v) 照合順序におけるシンボル: "[.ch.]" や "[.a-acute.]" のように "[." と ".]" で挟まれた文字列は、カレントロケールで定義された照合順序の要素となる。 ある一つの要素が複数の文字からなる場合もありうることに注意。
(vi) 等価クラス表現 (equivalence class expressions): "[=a=]" のように "[=" と "=]" とで挟まれた文字列である。 これは等価クラスのメンバーである照合順序の要素すべてになる。 等価クラスはカレントロケールで定義されているものになる。 例えば、"[[=a=]]" は "[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]" と等価である (Latin-1 表記では [a\`{a}\'{a}\"{a}\^{a}] も同じ。 [訳注] 日本語の roff ページでは latin1 コードが出ないので、 ここでは TeX 表記で記載)。