グロブ

From Wikipedia, the free encyclopedia

グロブ: glob)とは主にUnix系環境において、ワイルドカードでファイル名のセットを指定するパターンのことである。例えば、UNIXのコマンド「mv *.xlsx 営業実績/」はカレントディレクトリから営業実績/ディレクトリへと.xlsxで終わる全てのファイルを移動する。ここで、*は「任意の文字列」を表すワイルドカードであり、*.xlsxはグロブである。*以外に一般的なワイルドカードは疑問符 (?) であり、これは任意の1文字を表す。

UNIXの初期バージョン(1969年の「1st」版から1975年の「6th」版まで)におけるコマンドインタプリタでは、コマンドへの引用符で囲まれていない引数内に含まれるワイルドカードの展開は、インタプリタとは独立した /etc/glob というプログラムに依存していた[1]。このプログラムが展開を行い、実行するコマンドへ展開されたファイルパスリストを提供した。この名前はグローバル・コマンドの略語である[2]。後にこれは機能的に glob というライブラリ関数として提供され、シェルなどのプログラムで利用されている。

構文

最も一般的なワイルドカードは*?、および[…]である。

ワイルドカード 解説 使用例
グロブ表現 マッチする文字列の例 マッチしない文字列の例
* 0文字以上の任意の文字列にマッチ 営業* 営業営業実績 2019年度営業2019年度営業計画
*営業* 営業営業実績2019年度営業2019年度営業計画
? 任意の1文字にマッチ 営業実績? 営業実績1営業実績B 営業実績営業実績12
[c1c2cN] 括弧内で列挙されたどれか1文字にマッチ 営業実績[123] 営業実績1営業実績2営業実績3 営業実績営業実績4営業実績12
[cmin-cmax] 括弧内で指定された範囲内の1文字にマッチ 営業実績[0-9] 営業実績1営業実績3営業実績4営業実績5営業実績9 営業実績営業実績10営業実績B営業実績2019

いずれの場合においても、パス区切り文字(UNIXでは/Windowsでは\)にマッチすることは絶対にない。

UNIX

LinuxPOSIXのシステムでは*および?が定義されているが、[…]には以下の2つが追加されている[3][4]:

ワイルドカード 解説 使用例
グロブ表現 マッチする文字列の例 マッチしない文字列の例
[!c1c2cN] 括弧内で列挙されていない何かの1文字にマッチ 営業実績[!456] 営業実績1営業実績9営業実績B 営業実績営業実績4営業実績5営業実績6営業実績12
[!cmin-cmax] 括弧内で指定されていない範囲内の1文字にマッチ 営業実績[!3-5] 営業実績1営業実績9営業実績B 営業実績営業実績3営業実績4営業実績5営業実績10営業実績2019

C ShellBashなどの)シェルの中には、AlternationやBrace Expansionとして知られる追加の構文をサポートしているものもある。

Bashは上記以外のパターンマッチ演算子を使用して、括弧で囲まれたパターンの複数発生へのマッチを可能にするextended globbing(拡張グロブ)もサポートする。この機能はextglobシェルオプションをセットすることで有効になる[5]

Windows PowerShell

Windows PowerShellは、上記で述べたものと同様に定義された構文を全て搭載しているので、機能追加を行う必要はない[6]

Windows

MS-DOSおよびWindowsの、COMMAND.COMcmd.exe は、グロブ展開を行わず、コマンドラインにあるワイルドカード* などは起動するプログラムにそのまま渡され、プログラム側で対応していればそれなりの動作をする(かもしれない)。シェルの内部コマンドなどで解釈される場合については制限付きながらほぼ同様の構文を持つが、構文が一見似ているだけで、「制限付き」の制限のおかげで全く別物であり、[…]は存在せず、さらにCOMMAND.COMの*はパターンの終わりにしか付けられない。

SQL

SQLの、LIKE条件中のパターンには、?*に相当する表現が使える。[]に相当する表現は存在しない。

通常のワイルドカード SQLのワイルドカード
? _
* %

標準SQLにおけるLIKE条件では、単純な文字列マッチにグロブと似た構文を利用する。パーセント記号 (%) は0文字以上の文字列にマッチし、アンダースコアは1文字にマッチする。しかしながらSQLコミュニティにおいて「グロブ」という用語は一般的ではない。SQLの実装の多くはLIKE条件を拡張し、正規表現の要素を取り入れた、より豊富なパターンマッチを可能としている。

独自拡張SQLの中にはTransact-SQLのように、[…]の機能を提供するものもある。この例が[characters][^characters][7]である。

正規表現との比較

グロブには、式の前にある部分を複数回繰り返すことを可能とする、クリーネ閉包が無いなど、正規表現とは異なったものである。

ワイルドカード 等価の正規表現
? .
* .*

グロブは文字列全体とのマッチを試みる。例えば、営業実績*.xlsx営業実績.xlsx営業実績10月.xlsx にマッチするが、営業実績.xls2020年度営業実績.xlsx営業実績.docx にはマッチしない。

実装

関連項目

脚注

Related Articles

Wikiwand AI