グロブ:ファイル名のパターンマッチングを可能にするワイルドカード機能
グロブとは、
Unix系OSで主に使用されるワイルドカード機能です。特定のパターンに一致する複数の
ファイル名を一度に指定する際に用いられ、ファイル操作を効率化します。例えば、`.txt` は、現在のディレクトリにある全ての`.txt`拡張子のファイルを意味します。この``がグロブにおけるワイルドカードの一つであり、任意の
文字列にマッチします。他に`?`は任意の一文字にマッチするワイルドカードとして知られています。
グロブの起源
グロブの起源は
UNIX初期のバージョン(1969年から1975年)まで遡ります。当時、コマンドインタプリタは`/etc/glob`という独立したプログラムを用いてワイルドカードの展開を行っていました。これは、グローバルコマンドの略語で、後に`glob`というライブラリ関数として提供され、現在では多くの
シェルやプログラムで利用されています。
グロブの構文
最も基本的なワイルドカードは``、`?`、`[...]`です。``は任意の
文字列、`?`は任意の一文字にマッチします。`[...]`内にはマッチさせたい
文字列を指定でき、`[^...]`とすれば指定した
文字列以外の文字にマッチします。どのワイルドカードもパス区切り文字(Unixでは`/`、Windowsでは`\`)にはマッチしません。
Linuxや
POSIX準拠のシステムでは``と`?`が標準で定義されています。`[...]`に加え、C
シェルや
Bashなどの
シェルでは、AlternationやBrace Expansionといった拡張構文もサポートしています。
Bashでは`extglob`オプションを有効化することで、拡張グロブを用いたより複雑なパターンマッチングも可能です。
Windows
MS-DOSやWindowsの`COMMAND.COM`、`cmd.exe`はグロブ展開を直接行いません。ワイルドカードはプログラムにそのまま渡され、プログラム側で処理されます。
シェルの内部コマンドでは制限付きながら同様の構文が利用できますが、`[...]`はサポートされておらず、``はパターンの末尾にのみ使用できます。
Windows PowerShell
Windows PowerShellは
UNIX系
シェルのグロブ構文とほぼ同様の機能を備えています。
SQLの`LIKE`句では、`%`が``、`_`が`?`に相当するワイルドカードとして使用できます。`[...]`に相当する機能は標準
SQLにはありませんが、多くの
SQL実装では`LIKE`句を拡張し、
正規表現に近い機能を提供しています。Transact-
SQLなどの一部の
SQL拡張では`[...]`に似た機能が提供されています。
グロブと
正規表現はどちらもパターンマッチングに使用されますが、いくつかの違いがあります。グロブは
文字列全体へのマッチングを試みるのに対し、
正規表現は部分
文字列へのマッチングも可能です。また、グロブは
正規表現のような繰り返しやメタ文字の高度な機能を備えていません。
グロブの実装例
様々なプログラミング言語でグロブ機能が提供されています。以下に例を示します。
Bash、tcsh、zsh: Unix系シェルの標準機能
cmd.exe: Windowsの
コマンドラインインタプリタは、グロブを行うアプリケーションに依存
Windows PowerShell: グロブをサポートするCmdletを提供
D言語: `std.path`モジュールの`globMatch`
Node.js: `minimatch`ライブラリ
Go: `filepath`パッケージの`Glob`関数
Java: `Files`クラスのメソッド
Haskell: `System.FilePath.Glob`モジュールの`Glob`パッケージ
Perl: `glob`関数とGlob拡張
PHP: `glob`関数
Python: `glob`モジュールと`fnmatch`モジュール
Ruby: `Dir`クラスの`glob`メソッド
SQLite: `GLOB`関数
*
Tcl: 正規表現とグロブの両方をサポート
まとめ
グロブは、
ファイル名などのパターンマッチングに便利なワイルドカード機能です。
Unix系システムでは広く利用されており、多くのプログラミング言語でもサポートされています。
正規表現と比較して機能は限定的ですが、ファイル操作など、特定の用途においては非常に効率的なツールとなります。それぞれの言語や環境におけるグロブの実装方法を理解することで、より効率的なプログラミングを行うことができます。