OSDN Git Service

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