説明
expr に渡される引数セットによって、評価される式が構成されます。
各コマンドの引数は、式の個々のトークンです。expr は、式の結果を標準出力に書き込みます。このコマンドは、主としてシェル変数の演算およびストリング処理のためのものです。
expr は、以下の演算子をサポートします。一緒に説明されている演算子は、等しい優先順位を持っています。そうでないものは、優先順位の低いものから並べられています。
expr 式をストリングとして格納し、実行中に数に変換します。コンテキストによってブール値が必要な場合、数値
0 (ゼロ) またはヌル・ストリング ("") は
偽、それ以外の値はすべて
真 です。
数字の前には、オプションで符号を付けることができます。
-W オプションが指定されていない場合、
数字は 10 進数です。
-W オプションが指定されている
場合、式には 8 進数、16 進数、または 10 進数が含まれている可能性があります。
expr は、次のようにして数値の基数を判断します。
- 0x で始まる数は 16 進数です。
- 0 で始まる数は 8 進数です。
- 0x または 0 で始まっていない数は 10 進数です。
数は、長整数として扱われます。
- expr1 | expr2
- expr1 が真の場合は、結果は値 expr1 になります。それ以外の場合は、結果は expr2 の値になります。
- expr1 & expr2
- 両方の式が真の場合は、結果は expr1 の値になります。それ以外の場合は、結果は 0 になります。
- expr1 <= expr2 | expr1 < expr2 | expr1 = expr2 | expr1 != expr2 | expr1 >= expr2 | expr1 > expr2
- expr1 および expr2 の両方が数値の場合
は、expr はそれらを数として比較します。それ以外の場合は、ストリングとして比較します。比較が真の場合は、式の結果は 1 になります。それ以外の場合は、結果は 0 です。
- expr1 + expr2 | expr1 – expr2
- 2 つの式の加算または減算が実行されます。いずれかの式が数でない場合は、expr はエラーで終了します。
- expr1 * expr2 | expr1
/ expr2 | expr1 % expr2
- 2 つの式の乗算、除算、またはモジュラスが実行されます。いずれかの式が数でない場合は、expr はエラーで終了します。
- expr1 : re | match expr1 re
- 正規表現 re を、ストリングとしての expr1 と
マッチングさせます。正規表現は ed によって受け付けられるものと同じですが、
マッチングが常にアンカーされている (すなわち、暗黙の先行 ^ がある) という
点が異なります。したがって、expr は ^ をメタキャラクターと見なしません。正規表現に ¥(…¥), ¥) が含まれており、それが expr1 の少なくとも一部と一致している場合、 expr の結果はその部分だけとなります。一致がない場合、expr の結果は 0 となります。正規表現にこの構成が含まれていない場合には、結果は一致した文字数となります。
関数 match は、コロン演算子と同じ演算を実行します。
- substr expr1 expr2 expr3
- 結果は、開始位置が expr2 (起点は 1) で
長さが expr3 の、expr1 のサブストリングになります。
- index expr1 expr2
- expr2 内の個々の文字を expr1 内で検索し、結果は、その文字のオフセット (起点 1) となり、その文字が見つからない場合は 0 になります。
- length expr1
- 結果は、expr1 の長さになります。
- ( expr )
- 式をグループ化します。
オプション
- –W
- expression が、16 進数および 8 進数を使用できるようになります。
使用上の注意
構文解析プログラムのスタックの深さは、150 レベルまでに制限されます。非常に複雑なプログラムを処理しようとすると、このスタックがオーバーフローして、エラーの原因になる可能性があります。
例
- 例えば、
fname=src/fn_abs.c
expr $fname : '*_¥(.*¥)¥.c'
は、abs を戻します。
- 例えば、
a='expr $a + 1'
は、シェル変数 a の値に 1 を加算します。
ローカライズ
expr は、以下のローカライズ環境変数を使用します。
- LANG
- LC_ALL
- LC_COLLATE
- LC_CTYPE
- LC_MESSAGES
- LC_SYNTAX
- NLSPATH
詳しくは、ローカライズを参照してください。
終了値
- 0
- expression の結果は真である。
- 1
- expression の結果は偽である。
- 2
- 以下のいずれかによる失敗。
- 十分なメモリーがない
- コマンド行構文エラー
- コマンド行の引数が少なすぎる
- 正規表現が正しくない
- 正規表現が複雑すぎる
- 数が予想されるところに数でない値が検出された
メッセージ
以下の
エラー・メッセージが出される可能性があります。
- internal tree error
- 構文エラーまたは式の異常な複雑さの
ため、expr は式を評価できません。式に構文エラーがある場合は、それらを訂正してください。そうでない場合は、式を単純化 (おそらく部分に分けることによって) してください。
移植性
POSIX.2, X/Open 移植性ガイド, UNIX システム.
シェル内では、このコマンドは大部分 let に置き換えられます。
match、substr、length お
よび index は、存在していますがすべて
の UNIX システムで記述されているわけではありません。これらは、POSIX 標準の拡張です。