このページの内容

2.2 環境変数

grepの動作は、いくつかの環境変数の影響を受けます。特に重要なのはロケールを制御する変数です。ロケールは、grepがパターンやデータの文字をどのように解釈するかを定めます。

カテゴリーLC_fooのロケールは、環境変数LC_ALL、LC_foo、LANGをこの順に調べ、最初に設定されている変数で決まります。たとえば、LC_ALLが設定されておらず、LC_COLLATEが「pt_BR.UTF-8」に設定されている場合、LC_COLLATEカテゴリーにはブラジルのポルトガル語ロケールを使います。LC_MESSAGESだけの特例として、環境変数LANGUAGEにはコロンで区切った言語の一覧を指定でき、通常LC_MESSAGESカテゴリーを指定する3つの環境変数より優先されます。これらの環境変数がどれも設定されていない場合、ロケールカタログがインストールされていない場合、またはgrepが各国語対応(NLS)を有効にせずコンパイルされている場合は、「C」ロケールを使います。シェルコマンドlocale -aは、現在利用できるロケールを一覧表示します。

以下の環境変数がgrepの動作に影響します。

GREP_COLOR

この廃止予定の変数は、GREP_COLORSとの関係が分かりにくく、この変数を設定してGREP_COLORSで上書きしていない場合、grepは警告を表示します。「GREP_COLOR='color'」の代わりに「GREP_COLORS='mt=color'」を使えます。

GREP_COLORS

この変数は、--colorオプションによる出力の強調表示を制御します。値は、コロンで区切ったterminfoの機能指定の一覧です。既定値は「ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36」で、真偽値の機能指定「rv」と「ne」は省略され、つまり偽です。2文字の機能名は、テキストの強調や色の変更など、端末の「機能」を表します。これらの機能はオンラインのデータベースに格納され、terminfoライブラリーを通じて参照します。空でない機能値は、端末または端末エミュレーターが解釈するSelect Graphic Rendition(SGR)コマンドで強調表示を制御します。使える値と文字属性としての意味は、テキスト端末の文書の該当節を参照してください。これらの部分文字列の値は10進表記の整数で、セミコロンで連結できます。grepは、その結果を完全なSGRシーケンス(「\33[」…「m」)に組み立てます。よく使われる値には、太字の「1」、下線の「4」、点滅の「5」、反転の「7」、既定の前景色の「39」、前景色の「30」〜「37」、16色モードの前景色の「90」〜「97」、88色・256色モードの前景色の「38;5;0」〜「38;5;255」、既定の背景色の「49」、背景色の「40」〜「47」、16色モードの背景色の「100」〜「107」、88色・256色モードの背景色の「48;5;0」〜「48;5;255」があります。

対応する機能指定は次のとおりです。

sl=

選択された行全体に適用するSGR部分文字列です。-vを省略した場合は一致行、-vを指定した場合は一致しない行を指します。ただし、真偽値の機能指定「rv」とコマンドラインオプション-vを両方指定した場合は、一致する文脈行に適用します。既定値は空で、端末の既定の前景色と背景色を使います。

cx=

文脈行全体に適用するSGR部分文字列です。-vを省略した場合は一致しない行、-vを指定した場合は一致行を指します。ただし、真偽値の機能指定「rv」とコマンドラインオプション-vを両方指定した場合は、選択された一致しない行に適用します。既定値は空で、端末の既定の前景色と背景色を使います。

rv

コマンドラインオプション-vを指定したとき、機能指定「sl=」と「cx=」の意味を反転、つまり入れ替える真偽値です。既定値は偽で、この機能指定を省略します。

mt=01;31

一致行にある、空でない一致テキストに適用するSGR部分文字列です。-vを省略した場合は選択行、-vを指定した場合は文脈行に適用します。これを設定することは、「ms=」と「mc=」を同じ値に同時に設定するのと同じです。既定では、現在の行の背景色に対して、前景色を太字の赤にします。

ms=01;31

選択行の空でない一致テキストに適用するSGR部分文字列です。コマンドラインオプション-vを省略した場合だけ使います。この強調が有効になるときも、機能指定「sl=」(「rv」がある場合は「cx=」)の効果は引き続き有効です。既定では、現在の行の背景色に対して、前景色を太字の赤にします。

mc=01;31

文脈行の空でない一致テキストに適用するSGR部分文字列です。コマンドラインオプション-vを指定した場合だけ使います。この強調が有効になるときも、機能指定「cx=」(「rv」がある場合は「sl=」)の効果は引き続き有効です。既定では、現在の行の背景色に対して、前景色を太字の赤にします。

fn=35

内容を出力する各行の前に付けるファイル名に適用するSGR部分文字列です。既定では、端末の既定の背景色に対して、前景色をマゼンタにします。

ln=32

内容を出力する各行の前に付ける行番号に適用するSGR部分文字列です。既定では、端末の既定の背景色に対して、前景色を緑にします。

bn=32

内容を出力する各行の前に付けるバイトオフセットに適用するSGR部分文字列です。既定では、端末の既定の背景色に対して、前景色を緑にします。

se=36

選択行のフィールド間(「:」)、文脈行のフィールド間(「-」)、0でない文脈行数を指定した場合の、隣接行からなるグループ間(「--」)に挿入する区切りに適用するSGR部分文字列です。既定では、端末の既定の背景色に対して、前景色をシアンにします。

ne

色を付けた項目が終わるたびに、Erase in Line(EL)to Right(「\33[K」)で行末まで消去する処理を防ぐ真偽値です。ELに対応しない端末で必要です。ほかにも、terminfoの真偽値機能back_color_erase(bce)が適用できない端末、選んだ強調色が背景に影響しない場合、ELが遅すぎる場合やちらつきが大きすぎる場合に役立ちます。既定値は偽で、この機能指定を省略します。

真偽値の機能指定には「=」以降の部分がありません。既定では省略されて偽となり、指定すると真になります。

LC_ALL
LC_COLLATE
LANG

これらの変数は、LC_COLLATEカテゴリーのロケールを指定します。「a-z」などの範囲表現の解釈に影響する場合があります。

LC_ALL
LC_CTYPE
LANG

これらの変数は、LC_CTYPEカテゴリーのロケールを指定します。このカテゴリーは、どの文字が空白であるかなど、文字の種類を定めます。また、文字符号化も定めます。「文字符号化」を参照してください。

LANGUAGE
LC_ALL
LC_MESSAGES
LANG

これらの変数は、LC_MESSAGESカテゴリーのロケールを指定し、grepがメッセージに使う言語を定めます。既定の「C」ロケールでは、アメリカ英語のメッセージを使います。

POSIXLY_CORRECT

この変数を設定すると、grepはPOSIXの規定に従って動作します。設定しない場合、grepはほかのGNUプログラムに近い動作をします。POSIXでは、ファイル名の後ろにあるオプションをファイル名として扱う必要があります。既定では、そのようなオプションを引数一覧の先頭へ並べ替え、オプションとして扱います。

TERM

この変数は出力先の端末の種類を指定し、--colorオプションの動作に影響する場合があります。「一般的な出力の制御」を参照してください。

grep 2.20以前の環境変数GREP_OPTIONSは、移植可能なスクリプトを書く際に問題を生じさせたため、現在は対応していません。grepの動作を任意に変更するには、代わりに別名やスクリプトを使えます。たとえば、grepが「/usr/bin」ディレクトリーにある場合、PATHの先頭に$HOME/binを加え、次の内容の実行可能スクリプト$HOME/bin/grepを作れます。

#! /bin/sh
export PATH=/usr/bin
exec grep --color=auto --devices=skip "$@"