exprコマンド(式を評価する)
形式
expr 式
機能
式を評価して,標準出力に結果を書き込みます。式の要素はすべて別々の引数として指定します。
式は,数値・文字列・変数・式およびそれらと演算子の組み合わせで指定します。式の評価は文字列および整数として保持します。
引数
- 式
-
評価する式を指定します。演算子を優先順位の低い順に次に示します。同じ優先順位の演算子は,{ }で囲みコンマで区切って示します。引数が不正の場合,exprコマンドはエラーメッセージを出力して終了コード2を返します。expr1 とexpr2には式を指定します。
- 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$'」などのように使用する必要があります。
-
- length 文字列
-
指定した文字列の長さを返します。環境変数ADSH_CMDEXPR_LENGTHについては「2.5 環境変数を設定する」を参照してください。
-
環境変数ADSH_CMDEXPR_LENGTH=bが設定されている場合,lengthは演算子と判断され,その後ろに続く文字列の長さ(バイト数)を返します。
-
環境変数ADSH_CMDEXPR_LENGTH=cが設定されている場合,lengthは演算子と判断され,その後ろに続く文字列の長さ(文字数)を返します。
-
環境変数ADSH_CMDEXPR_LENGTHが設定されていない,またはb,c以外の値を設定した場合は,lengthは演算子として扱われません。
また,length演算子には式を指定できます。式を指定する場合は,式全体を()(丸括弧)で囲む必要があります。
-
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了。式は空文字列および0ではありません。 |
1 |
正常終了。式は空文字列または0です。 |
2 |
エラー終了。式は無効です。 |
3以上 |
エラー終了
|
注意事項
-
整数値は- 2147483648〜2147483647の範囲で保存します。それより大きな値を指定した場合は,32ビットの2進数であふれた桁は無視して取り出されます。
-
演算子および括弧に指定する文字は,シェルによって解釈される文字を含むため,適切にエスケープする必要があります。式全体をダブルクォーテーション(")で囲むと文字列として解釈されるため,個々の演算子をダブルクォーテーション(")で囲む必要があります。
-
このコマンドには指定可能なオプションが存在しません。そのため,引数にオプションを指定した場合,そのオプションを式として解釈します。
使用例
-
変数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 $
-
文字列「テスト文字列」の長さをバイト数で返します。
$ export ADSH_CMDEXPR_LENGTH=b $ echo $LANG ja_JP.UTF-8 $ expr length "テスト文字列" 18
-
文字列「テスト文字列」の長さを文字数で返します。
$ export ADSH_CMDEXPR_LENGTH=c $ echo $LANG ja_JP.UTF-8 $ expr length "テスト文字列" 6
-
文字列「teststring」の長さ(バイト数)に2を加算して返します。
$ export ADSH_CMDEXPR_LENGTH=b $ echo $LANG ja_JP.UTF-8 $ expr length teststring + 2 12