OSDN Git Service

(split) LDP: Some released pages have no COLOPHON sections.
[linuxjm/LDP_man-pages.git] / draft / man7 / glob.7
1 .\" Copyright (c) 1998 Andries Brouwer
2 .\"
3 .\" This is free documentation; you can redistribute it and/or
4 .\" modify it under the terms of the GNU General Public License as
5 .\" published by the Free Software Foundation; either version 2 of
6 .\" the License, or (at your option) any later version.
7 .\"
8 .\" The GNU General Public License's references to "object code"
9 .\" and "executables" are to be interpreted as the output of any
10 .\" document formatting or typesetting system, including
11 .\" intermediate and printed output.
12 .\"
13 .\" This manual is distributed in the hope that it will be useful,
14 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
15 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 .\" GNU General Public License for more details.
17 .\"
18 .\" You should have received a copy of the GNU General Public
19 .\" License along with this manual; if not, write to the Free
20 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
21 .\" USA.
22 .\"
23 .\" 2003-08-24 fix for / by John Kristoff + joey
24 .\"
25 .\"*******************************************************************
26 .\"
27 .\" This file was generated with po4a. Translate the source file.
28 .\"
29 .\"*******************************************************************
30 .TH GLOB 7 2003\-08\-24 Linux "Linux Programmer's Manual"
31 .SH 名前
32 glob \- パス名を glob する
33 .SH 説明
34 昔々 UNIX V6 では、ワイルドカードパターンを展開する \fI/etc/glob\fP と言うプログラムがあった。その後すぐに、
35 この機能はシェルに組み込まれるようになった。
36
37 今日では、この機能をユーザープログラムからも実行できるよう、 \fBglob\fP(3)  というライブラリルーチンも存在している。
38
39 glob の規則を以下に述べる (POSIX.2 3.13)。
40 .SS ワイルドカードマッチ
41 文字列に \(aq?\(aq, \(aq*\(aq, \(aq[\(aq が含まれていると、 それはワイルドカードパターンとみなされる。 「glob
42 する」というのは、ワイルドカードパターンを展開して、 そのパターンにマッチするパス名のリストを得ることである。 マッチは以下のように定義される。
43
44 (ブラケット外部の) \(aq?\(aq はあらゆる単一の文字にマッチする。
45
46 (ブラケット外部の) \(aq*\(aq はあらゆる文字列にマッチする。 空文字列 (empty string) にもマッチする。
47 .PP
48 \fB文字クラス (character class)\fP
49 .sp
50 "\fI[...]\fP" と言う表記は、先頭の \(aq[\(aq に続く最初の文字が \(aq!\(aq で
51 なければ、ブラケットの中に含まれている文字のどれか一つにマッチする。 ブラケットの内部に含まれる文字列は空であってはならない。 したがって
52 \(aq]\(aq も最初の文字に指定すればブラケットの内部に含めることが できる (つまり "\fI[][!]\fP" は \(aq[\(aq,
53 \(aq]\(aq, \(aq!\(aq の 3 文字のどれかにマッチする)。
54 .PP
55 \fB領域指定 (range)\fP
56 .sp
57 特殊な表記法が一つ存在する。\(aq\-\(aq を挟む二つの文字は領域指定となる。 (つまり "\fI[A\-Fa\-f0\-9]\fP" は
58 "\fI[ABCDEFabcdef0123456789]\fP" と等価となる。) \(aq\-\(aq 文字そのものを入れたい場合は、
59 ブラケットの先頭または最後の文字に指定すればよい。 (つまり "\fI[]\-]\fP" は二つの文字 \(aq]\(aq と \(aq\-\(aq
60 にマッチし、"\fI[\-\-0]\fP" は \(aq\-\(aq, \(aq.\(aq, \(aq0\(aq の 3 文字にマッチする。この間の
61 \(aq/\(aq にはマッチしない。後述を参照。)
62 .PP
63 \fB補集合 (complementation)\fP
64 .sp
65 "\fI[!...]\fP" と言う表記は、ブラケットの内部に含まれない単一の文字にマッチする (ただし先頭にある \(aq!\(aq は除外)。 (つまり
66 "\fI[!]a\-]\fP" は \(aq]\(aq, \(aqa\(aq, \(aq\-\(aq 以外のすべての文字の、どれか一つにマッチする。)
67
68 バックスラッシュ \(aq\e\(aq を前置すれば、 \(aq?\(aq, \(aq*\(aq, \(aq[\(aq は通常の文字として扱われる。
69 またはシェルのコマンドラインの一部に指定する場合は、 クォートで囲っても同じ効果が得られる。ブラケットの内部では、
70 これらの文字はその文字自身だけを意味する。 すなわち "\fI[[?*\e]\fP" は \(aq[\(aq, \(aq?\(aq, \(aq*\(aq,
71 \(aq\e\(aq のどれか一文字にマッチする。
72 .SS "パス名 (pathname)"
73 glob 動作は、パス名のそれぞれの部分に独立に適用される。 パス名に存在する \(aq/\(aq は \(aq?\(aq や \(aq*\(aq
74 ワイルドカードにはマッチしない。 また "\fI[.\-0]\fP" のような領域指定にもマッチしない。 領域指定は陽に \(aq/\(aq
75 文字を含むことはできない。これは文法エラーとなる。
76
77 \(aq.\(aq で始まるパス名では、この文字は陽にマッチさせなければならない。 (つまり \fIrm\ *\fP は .profile を削除しない。また
78 \fItar\ c\ *\fP ではすべてのファイルはアーカイブされない。 \fItar\ c\ .\fP の方が良い。)
79 .SS 空のリスト
80 先に与えた、わかりやすく簡単なルール、 「ワイルドカードパターンをマッチしたパス名のリストに展開する」と言うのは、 オリジナルの UNIX
81 における定義であった。 これはパターンが空のリストに展開されることも許可されていた。 例えば
82 .br
83 .nf
84     xv \-wait 0 *.gif *.jpg
85 .fi
86 において、*.gif ファイルが全くない場合でも、 これは空のリストに展開されるため、エラーにならない。 しかし POSIX
87 では、文法的に正しくないパターンや、 マッチがなかったパターンは、 そのまま変更されずに残されることになっている。 \fIbash\fP では
88 \fIallow_null_glob_expansion=true\fP を指定することで、以前の振る舞いに設定することができる。
89
90 (同様の問題は別のところでも起こっている。例えば、古いスクリプトにおける
91 .br
92 .nf
93     rm \`find . \-name "*~"\`
94 .fi
95 のような記述は、新しいスクリプトでは
96 .br
97 .nf
98     rm \-f nosuchfile \`find . \-name "*~"\`
99 .fi
100 のようにしなければならない。さもないと \fIrm\fP を引き数リストなしで呼び出す可能性があり、 エラーメッセージが出てしまう。)
101 .SH 注意
102 .SS 正規表現
103 ワイルドカードパターンは正規表現と多少似ているが、しかしこの両者は異なる。 まず第一に、前者がファイル名にマッチするのに対して、
104 後者はテキストにマッチする。第二に、ルールも同じではない。 例えば正規表現における \(aq*\(aq は、 前置された文字の 0
105 以上の繰り返しを表す。
106
107 正規表現にもブラケット表現はあるが、否定は \(aq^\(aq でなされる。 POSIX ではワイルドカードパターンにおける "\fI[^...]\fP"
108 を未定義であるとしている。
109 .SS 文字クラスと国際化
110 領域指定は、もともとはもちろん ASCII における順序並びを意味していた。 したがって "\fI[\ \-%]\fP" は "\fI[\ !"#$%]\fP"
111 の意味であり、 "\fI[a\-z]\fP" は「すべての小文字」の意味であった。 UNIX の実装の中には、これを拡張したものが存在し、 そこでは X\-Y
112 という領域指定は、X のコードと Y のコードに挟まれたコードを持つ文字すべてを表すようになっていた。
113 しかし、これにはユーザーがローカルなシステムにおける 文字コードを知らなければならず、 さらにローカルなアルファベットに対する照合順序
114 (collating sequence) が文字コードの順序と異なっている場合には不便であった。 (訳注: collating sequence
115 に関しては \fBregex\fP(7)  を参照して下さい。)  したがって POSIX では、ワイルドカードパターンと正規表現の双方において、
116 ブラケット表記を大幅に拡張している。 これまで我々は、ブラケット表記には三つの要素が含まれうることを見てきた。 すなわち (i) 否定、(ii)
117 単一の文字、(iii) 領域指定、の三つである。 POSIX では、領域指定をより国際化に便利なように定義しており、
118 また三つのタイプをブラケット表記の要素として追加している。
119
120 (iii) 領域指定 X\-Y は X と Y に挟まれた (両端含む) すべての文字を意味する。 このとき、カレントロケール (current
121 locale) の \fBLC_COLLATE\fP カテゴリで定義されている照合順序が用いられる。
122
123 (iv) 名前付き文字クラス: 以下のようなものである。
124 .nf
125
126 [:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]
127 [:digit:]  [:graph:]  [:lower:]  [:print:]
128 [:punct:]  [:space:]  [:upper:]  [:xdigit:]
129
130 .fi
131 これを用いれば "\fI[a\-z]\fP" の代わりに "\fI[[:lower:]]\fP" のような指定ができる。 またデンマークのように、アルファベットの
132 \(aqz\(aq 以降に 3 つの文字が存在するような場合でも、同じような動作が期待できる。 これらの文字クラスはカレントロケールの
133 \fBLC_CTYPE\fP カテゴリで定義されている。
134
135 (v) 照合順序におけるシンボル: "\fI[.ch.]\fP" や "\fI[.a\-acute.]\fP" のように "\fI[.\fP" と "\fI.]\fP"
136 で挟まれた文字列は、カレントロケールで定義された照合順序の要素となる。 ある一つの要素が複数の文字からなる場合もありうることに注意。
137
138 .\" FIXME . the accented 'a' characters are not rendering properly
139 .\" mtk May 2007
140 (vi) 等価クラス表現 (equivalence class expressions):
141 "\fI[=a=]\fP" のように "\fI[=\fP" と "\fI=]\fP" とで挟まれた文字列であり、
142 カレントロケールで定義された等価クラスのメンバーである照合要素のいずれかを表す。
143 例えば、"\fI[[=a=]]\fP" は "\fI[aáàäâ]\fP" (注意: これは Latin\-1 表記)、つまり
144 "\fI[a[.a\-acute.][.a\-grave.][.a\-umlaut.][.a\-circumflex.]]\fP" と等価になる。
145 .SH 関連項目
146 \fBsh\fP(1), \fBfnmatch\fP(3), \fBglob\fP(3), \fBlocale\fP(7), \fBregex\fP(7)
147 .SH この文書について
148 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.40 の一部
149 である。プロジェクトの説明とバグ報告に関する情報は
150 http://www.kernel.org/doc/man\-pages/ に書かれている。