JP1/Advanced Shell
形式
expr 式
機能
式を評価して,標準出力に結果を書き込みます。式の要素はすべて別々の引数として指定します。
式は,数値・文字列・変数・式及びそれらと演算子の組み合わせで指定します。式の評価は文字列および整数として保持します。
引数
優先順位の低い順に演算子を示します。同じ優先順位の演算子は,{ }で囲みコンマで区切って示します。expr1とexpr2には式を指定します。
引数が不正の場合,exprコマンドはエラーメッセージを出力して返り値2を返します。
- expr1 | expr2
- expr1の評価が空文字列およびゼロではない場合,expr1の評価を返します。expr1が空文字列およびゼロの場合は,expr2の評価を返します。expr2も空文字の場合は,空文字を返します。
- expr1 & expr2
- どちらの式の評価も空文字列またはゼロではない場合,expr1の評価を返します。それ以外の場合は,0を返します。
- expr1 {=,>,>=,<,<=,!=} expr2
- 両方の式の評価が整数の場合は,整数を比較した結果を返します。それ以外の場合は,ロケールで定義した照合順序で文字列を比較した結果を返します。結果は,指定された関係が真の場合は1,偽の場合は0になります。
- =:左辺の値と右辺の値が等しい
- >:左辺の値が大きい
- >=:左辺の値が大きいか右辺の値と等しい
- <:左辺の値が小さい
- <=:左辺の値が小さいか右辺の値と等しい
- !=:左辺の値と右辺の値が等しくない
- expr1 {+,-} expr2
- 両方の式の評価が整数値の場合,加算または減算の結果を返します。
- 整数値ではない場合,エラーメッセージ(expr: non-numeric argument)を出力します。
- +:加算
- -:減算
- expr1 {*,/,%} expr2
- 両方の式の評価が整数値の場合,乗算,除算および剰余演算の結果を返します。整数値ではない場合,エラーメッセージ(expr: non-numeric argument)を出力します。除数がゼロの場合,エラーメッセージ(expr: division by zero)を出力します。
- *:乗算
- /:除算
- %:剰余
- expr1 : expr2
- expr2がexpr1と一致するかどうかを評価します。
- expr2は正規表現で指定します。正規表現には,「^」がストリングの先頭に付加されます。
- expr2にタグ付き正規表現が指定されている場合,(expr2がexpr1と一致する場合)最初のタグ付き正規表現にマッチした文字列を返します。
- expr2にタグ付き正規表現が指定されていない場合,(expr2がexpr1と一致する場合)一致した文字数を返します。
- expr2がexpr1と一致しない場合,およびexpr2に正規表現が使用されている場合は空文字を返します。expr2に正規表現が使用されていない場合は,0を返します。
- expr2の指定が空文字と一致する指定の場合,0を返します。そのため,expr1が空文字であることを判定する場合は,expr1とexpr2の両方に同じ文字を付与して評価させる必要があります。つまり,「expr '' : '$'」はエラーであり,「expr X'' : 'X$'」などのように使用する必要があります。
戻り値
戻り値 意味 0 正常終了。式は空文字列および0ではありません。 1 正常終了。式は空文字列または0です。 2 エラー終了。式は無効です。 3以上 エラー終了
- メモリ不足などが発生しました。
注意事項
整数値は- 2147483648〜2147483647の範囲で保存します。それより大きな値を指定した場合は,32ビットの2進数であふれた桁は無視して取り出されます。例えば,4294967295+1は0となります。また,値として42949672950を指定した場合は,42949672950という文字列で保存されます。文字列として取り出す場合(expr 42949672950という指定をした場合),文字列としての42949672950が取り出され表示されます。数値として取り出す場合(expr 42949672950 + 1という指定をした場合),42949672950 = 100111111111111111111111111111110110であり,上位4bitがあふれているため,無視されて11111111111111111111111111110110となり,それに1を加えて11111111111111111111111111110111となります。これは,16進数でfffffff7であり10進数で-9です。
演算子および括弧に指定する文字は,シェルによって解釈される文字を含むため,適切にエスケープする必要があります。式全体をダブルクォーテーション(")で囲むと文字列として解釈されるため,個々の演算子をダブルクォーテーション(")で囲む必要があります。
使用例
- 変数aと変数bの演算をします。
$ a=2 $ b=3 $ x=`expr \( $a + $b \) \* 10` $ echo $? 0 $ echo $x 50 $- 変数a | 変数bの評価をします。
$ a="" $ b="abcdef" $ expr "$a" \| "$b" abcdef $- パス名から拡張子を除いたファイル名を切り出します。
$ a='d:\jp1as\test.txt' $ expr $a : '.*\\\(.*\)\.' test $- 変数に数字が含まれるかどうかを調べます。数字がない場合は0になります。
$ a='abcde12345kl' $ b='abcdefg' $ expr $a : '.*[0-9].*' 12 $ expr $b : '.*[0-9].*' 0 $
All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.