JP1/Advanced Shell

[目次][用語][索引][前へ][次へ]


exprコマンド(式を評価する)

形式

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です。

演算子および括弧に指定する文字は,シェルによって解釈される文字を含むため,適切にエスケープする必要があります。式全体をダブルクォーテーション(")で囲むと文字列として解釈されるため,個々の演算子をダブルクォーテーション(")で囲む必要があります。

使用例

[目次][前へ][次へ]


[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.