OSDN Git Service

(split) LDP: Update release pages (with po4a --force)
[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 \- globbing pathnames
34 .SH 説明
35 昔々 UNIX V6 では、ワイルドカードパターンを展開する \fI/etc/glob\fP と言うプログラムがあった。その後すぐに、
36 この機能はシェルに組み込まれるようになった。
37
38 今日では、この機能をユーザープログラムからも実行できるよう、 \fBglob\fP(3)  というライブラリルーチンも存在している。
39
40 glob の規則を以下に述べる (POSIX.2 3.13)。
41 .SS "Wildcard matching"
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 "Empty lists"
81 先に与えた、わかりやすく簡単なルール、 「ワイルドカードパターンをマッチしたパス名のリストに展開する」と言うのは、 オリジナルの UNIX
82 における定義であった。 これはパターンが空のリストに展開されることも許可されていた。 例えば
83
84 .nf
85     xv \-wait 0 *.gif *.jpg
86 .fi
87
88 where perhaps no *.gif files are present (and this is not an error).
89 However, POSIX requires that a wildcard pattern is left unchanged when it is
90 syntactically incorrect, or the list of matching pathnames is empty.  With
91 \fIbash\fP one can force the classical behavior using this command:
92
93 .\" In Bash v1, by setting allow_null_glob_expansion=true
94     shopt \-s nullglob
95
96 (同様の問題は別のところでも起こっている。例えば、古いスクリプトにおける
97
98 .nf
99     rm \`find . \-name "*~"\`
100 .fi
101
102 のような記述は、新しいスクリプトでは
103
104 .nf
105     rm \-f nosuchfile \`find . \-name "*~"\`
106 .fi
107
108 のようにしなければならない。さもないと \fIrm\fP を引き数リストなしで呼び出す可能性があり、 エラーメッセージが出てしまう。)
109 .SH 注意
110 .SS 正規表現
111 ワイルドカードパターンは正規表現と多少似ているが、しかしこの両者は異なる。 まず第一に、前者がファイル名にマッチするのに対して、
112 後者はテキストにマッチする。第二に、ルールも同じではない。 例えば正規表現における \(aq*\(aq は、 前置された文字の 0
113 以上の繰り返しを表す。
114
115 正規表現にもブラケット表現はあるが、否定は \(aq^\(aq でなされる。 POSIX ではワイルドカードパターンにおける "\fI[^...]\fP"
116 を未定義であるとしている。
117 .SS "Character classes and internationalization"
118 領域指定は、もともとはもちろん ASCII における順序並びを意味していた。 したがって "\fI[\ \-%]\fP" は "\fI[\ !"#$%]\fP"
119 の意味であり、 "\fI[a\-z]\fP" は「すべての小文字」の意味であった。 UNIX の実装の中には、これを拡張したものが存在し、 そこでは X\-Y
120 という領域指定は、X のコードと Y のコードに挟まれたコードを持つ文字すべてを表すようになっていた。
121 しかし、これにはユーザーがローカルなシステムにおける 文字コードを知らなければならず、 さらにローカルなアルファベットに対する照合順序
122 (collating sequence) が文字コードの順序と異なっている場合には不便であった。 (訳注: collating sequence
123 に関しては \fBregex\fP(7)  を参照して下さい。)  したがって POSIX では、ワイルドカードパターンと正規表現の双方において、
124 ブラケット表記を大幅に拡張している。 これまで我々は、ブラケット表記には三つの要素が含まれうることを見てきた。 すなわち (i) 否定、(ii)
125 単一の文字、(iii) 領域指定、の三つである。 POSIX では、領域指定をより国際化に便利なように定義しており、
126 また三つのタイプをブラケット表記の要素として追加している。
127
128 (iii) 領域指定 X\-Y は X と Y に挟まれた (両端含む) すべての文字を意味する。 このとき、カレントロケール (current
129 locale) の \fBLC_COLLATE\fP カテゴリで定義されている照合順序が用いられる。
130
131 (iv) 名前付き文字クラス: 以下のようなものである。
132 .nf
133
134 [:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]
135 [:digit:]  [:graph:]  [:lower:]  [:print:]
136 [:punct:]  [:space:]  [:upper:]  [:xdigit:]
137
138 .fi
139 これを用いれば "\fI[a\-z]\fP" の代わりに "\fI[[:lower:]]\fP" のような指定ができる。 またデンマークのように、アルファベットの
140 \(aqz\(aq 以降に 3 つの文字が存在するような場合でも、同じような動作が期待できる。 これらの文字クラスはカレントロケールの
141 \fBLC_CTYPE\fP カテゴリで定義されている。
142
143 (v) 照合順序におけるシンボル: "\fI[.ch.]\fP" や "\fI[.a\-acute.]\fP" のように "\fI[.\fP" と "\fI.]\fP"
144 で挟まれた文字列は、カレントロケールで定義された照合順序の要素となる。 ある一つの要素が複数の文字からなる場合もありうることに注意。
145
146 (vi) Equivalence class expressions, like "\fI[=a=]\fP", where the string
147 between "\fI[=\fP" and "\fI=]\fP" is any collating element from its equivalence
148 class, as defined for the current locale.  For example, "\fI[[=a=]]\fP" might
149 be equivalent to "\fI[a\('a\(`a\(:a\(^a]\fP", that is, to
150 "\fI[a[.a\-acute.][.a\-grave.][.a\-umlaut.][.a\-circumflex.]]\fP".
151 .SH 関連項目
152 \fBsh\fP(1), \fBfnmatch\fP(3), \fBglob\fP(3), \fBlocale\fP(7), \fBregex\fP(7)
153 .SH この文書について
154 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
155 である。プロジェクトの説明とバグ報告に関する情報は
156 http://www.kernel.org/doc/man\-pages/ に書かれている。