expr - 引数を式として評価する
/usr/bin/expr argument...
/usr/xpg4/bin/expr argument...
/usr/xpg6/bin/expr argument...
expr ユーティリティーは式を評価して、その結果を標準出力に書き出します。文字 0 はゼロ値として書き込まれ、何もない場合は NULL 文字列として書き込まれます。
expr ユーティリティーは式を評価して、その結果とその後に NEWLINE を標準出力に書き出します。expr 処理からの結果がない場合、NEWLINE が標準出力に書き込まれます。
argument オペランドは式として評価されます。式の項は空白文字で区切る必要があります。シェルに対する特殊文字は、エスケープする必要があります (sh(1) 参照)。空白文字またはその他の特殊文字を含む文字列は、引用符で囲む必要があります。式の長さは LINE_MAX (2048 文字) に制限されます。
演算子とキーワードを以下に示します。優先度の低いものから順に並べてあり、等しい優先度の演算子は、{ } 記号内にグループ分けされています。演算子はすべてその左に関わります。
1 番目の expr が NULL または 0 のどちらでもない場合、1 番目の expr の評価を返します。それ以外の場合、2 番目の expr が NULL でなければ、2 番目の expr の評価を返します。そうでなければ、0 を返します。
expr が両方とも NULL または 0 以外の場合、最初の expr を返します。それ以外の場合は、0 を返します。
両引数とも整数の場合、整数比較の結果を返します。それ以外の場合、ロケール固有の連立シーケンスを使用して、文字列比較の結果を返します。各比較の結果は、指定された関係が TRUE の場合は 1、FALSE の場合は 0 になります。
整数値引数の加減。
整数値引数の乗除または剰余。
マッチング演算子 : (コロン) は、最初の引数と 2 番目の引数を比較します。2 番目の引数は国際化された基本正規表現である必要があります。ただし、すべてのパターンが文字列の最初にアンカーされるという点を除きます。つまり、文字列の最初の文字から始まるシーケンスだけが正規表現と一致することができます。regex(7) および「注意事項」を参照してください。通常、/usr/bin/expr のマッチング演算子は一致したバイト数を返し、/usr/xpg4/bin/expr のマッチング演算子は一致した文字数を返します (失敗時は 0)。2 番目の引数に少なくとも 1 つの、基本正規表現のサブエクスプレッション [\(...\)] が含まれる場合、マッチング演算子は \1 に対応する文字列を返します。
数字だけからなる引数。先頭に負記号を付けることもできます。
integer 引数、または演算子符号の 1 つとして識別することができない文字列の引数です。
index、length、match、および substr の 4 つの演算子の優先度はすべて同じです。
character-list のバイトが string のバイトと一致する、string の最初のバイトを報告します (1 からカウントします)。character-list のバイトが string のバイトと一致しない場合は、0 が返されます。
string の長さ (バイト数) を返します。終端 NULL 文字はそのカウントには含まれません。
expr : expr マッチング演算子と同義です。
位置 integer-1 から始まる、長さが integer-2 バイトのバイトシーケンスを string から抽出します (1 からカウントします)。integer-1 が string のバイト数よりも大きい値である場合、expr は NULL 文字列を返します。string にあるバイト数よりも多く抽出しようとした場合、expr は string から残りのすべてのバイトを返します。integer-1 または integer-2 のどちらかが負の値である場合、結果は不確定です。
シェル変数 a に 1 を追加します。
example$ a=`expr $a + 1`使用例 2 パス名の要素を返す
以下は basename(1) をエミュレートする例です。これは、$a というパス名の最後の要素を返します。$a が /usr/abc/file か、ただの file のいずれかと等価の場合に、この例は、file を返します。(引数としての単独の / に注意してください。 expr は / を除数演算子とみなします。後述の「注意事項」を参照.)
example$ expr $a : '.*/\(.*\)' \| $a使用例 3 // 文字を使用して式を単純にする
前の例を改善したものです。// 文字を追加してあるので、除算演算子についてのあいまいさはなくなり、式全体が単純になっています。
example$ expr //$a : '.*/\(.*\)'
example$ expr "$VAR" : '.*'
example$ expr "$VAR" : '.*'
expr の実行に影響を与える次の環境変数 の詳細については、environ(7) を参照してください。LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、および NLSPATH。
式を評価した結果として、expr は次の終了値を返します。
式が NULL でも 0 でもない場合。
式が NULL または 0 である場合。
不正な式の場合。
エラーが発生しました。
属性についての詳細は、マニュアルページの attributes(7) を参照してください。
|
match、substr、length、および index 演算子は「不確実」です。ほかはすべて「確実」です。
basename(1), echo(1), ed(1), sh(1), intro(3), attributes(7), environ(7), regex(7), standards(7)
演算子とオペランドのエラー
数値ではない文字列に対して演算を行う
次の 3 つの演算子は CSI に対応していません。これらは、/usr/xpg4/bin/expr および /usr/xpg6/bin/expr で使用することもできません。
index string character-list length string substr string integer-1 integer-2
シェルによる引数の処理後、expr は、値による場合を除き、演算子とオペランドの違いを区別できなくなります。$a が = の場合、
example$ expr $a = '='
というコマンドは、次のコマンドと等価になります。
example$ expr = = =
これは、引数が expr に渡される (さらに、すべて引数が = 演算子と見なされる) ためです。次のコマンドは正しく動作します。
example$ expr X$a = X=
旧バージョンのあるバージョンとは違って、expr はシステムに提供されたすべてのロケールに対して、国際化された基本正規表現を使用します。国際化された正規表現に関しては regex(7) のマニュアルページを参照してください。
Solaris の以前のリリースには、ここで説明されている expr コマンドとは演算子優先順位が異なっている /usr/ucb/expr コマンドがありました。また、/usr/gnu/bin/expr コマンドには独自の演算子優先順位があります。