glob - 約束事その他の説明 - Linux コマンド集 一覧表
名前
glob - パス名を glob する
説明
昔々 Unix V6 では、ワイルドカードパターンを展開する
/etc/glob
と言うプログラムがあった。その後すぐに、
この機能はシェルに組み込まれるようになった。
今日では、この機能をユーザープログラムからも実行できるよう、
glob
(3) というライブラリルーチンも存在している。
glob の規則を以下に述べる (POSIX.2 3.13)。
ワイルドカードマッチ
文字列に `?', `*', `[' が含まれていると、
それはワイルドカードパターンとみなされる。
「glob する」というのは、ワイルドカードパターンを展開して、
そのパターンにマッチするパス名のリストを得ることである。
マッチは以下のように定義される。
(ブラケット外部の) `?' はあらゆる単一の文字にマッチする。
(ブラケット外部の) `*' はあらゆる文字列にマッチする。
空文字列 (empty string) にもマッチする。
文字クラス (character class)
`[...]' と言う表記は、先頭の `[' に続く最初の文字が `!' でなければ、
ブラケットの中に含まれている文字のどれか一つにマッチする。
ブラケットの内部に含まれる文字列は空であってはならない。
したがって `]' も最初の文字に指定すればブラケットの内部に含めることができる。
(つまり `[][[]' は `[', `]', `!' の 3 文字のどれかにマッチする。)
領域指定 (range)
特殊な表記法が一つ存在する。`-' を挟む二つの文字は領域指定となる。
(つまり `[A-Fa-f0-9]' は `[ABCDEFabcdef0123456789]'
と等価となる。) `-' 文字そのものを入れたい場合は、
ブラケットの先頭または最後の文字に指定すればよい。
(つまり `[]-]' は二つの文字 `]' と `-'
にマッチし、`[--0]' は `-', `.', `0' の 3 文字にマッチする。
この間の `/' にはマッチしない。後述を参照。)
補集合 (complementation)
`[[...]' と言う表記は、ブラケットの内部に含まれない単一の文字にマッチする
(ただし先頭にある `!' は除外)。 (つまり `[[]a-]' は `]', `a',
`-' 以外のすべての文字の、どれか一つにマッチする。)
バックスラッシュ `\' を前置すれば、 `?', `*', `['
は通常の文字として扱われる。
またはシェルのコマンドラインの一部に指定する場合は、
クォートで囲っても同じ効果が得られる。ブラケットの内部では、
これらの文字はその文字自身だけを意味する。
すなわち `'
も同じ意味になる。
関連項目
sh
(1),
fnmatch
(3),
glob
(3),
locale
(7),
regex
(7)