8a72894489
Sync with the original version. Unify some japanese words. Submitted by: kano@na.rim.or.jp
262 lines
7.1 KiB
Groff
262 lines
7.1 KiB
Groff
.\" -*- nroff -*-
|
|
.\"
|
|
.\" Copyright (c) 1993 Winning Strategies, Inc.
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by Winning Strategies, Inc.
|
|
.\" 4. The name of the author may not be used to endorse or promote products
|
|
.\" derived from this software without specific prior written permission
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.\" %FreeBSD: src/bin/expr/expr.1,v 1.25 2004/07/12 10:46:55 tjr Exp %
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.Dd July 12, 2004
|
|
.Dt EXPR 1
|
|
.Os
|
|
.Sh 名称
|
|
.Nm expr
|
|
.Nd 式を評価する
|
|
.Sh 書式
|
|
.Nm expr
|
|
.Op Fl e
|
|
.Ar expression
|
|
.Sh 解説
|
|
.Nm
|
|
ユーティリティは、与えられた式
|
|
.Ar expression
|
|
を評価し、その結果を標準出力に書き出します。
|
|
.Pp
|
|
すべての演算子およびオペランドは個別の引数として渡す必要があります。
|
|
演算子にはコマンドインタプリタにとって特別な意味を持つものがありますので、
|
|
適切にクォートする必要があります。
|
|
整数オペランドはすべて基数 10 として解釈されます。
|
|
.Pp
|
|
数値演算は、符号付き整数計算で行われます。
|
|
.Fl e
|
|
フラグを指定すると、演算は C の
|
|
.Vt intmax_t
|
|
データ型 (使用可能な最大整数型) を使用し、
|
|
.Nm
|
|
は数値あふれを検出するとエラー表示を返します。
|
|
整数に変換するとあふれるような大きさの数値オペランドが指定されると、
|
|
これは代りに文字列として解釈されます。
|
|
.Fl e
|
|
を指定しないと、数値演算および整数引数の解釈は、
|
|
.Vt long
|
|
データ型を使用し、C 標準のルールに従って黙って桁あふれを起します。
|
|
.Pp
|
|
以下に、使える演算子を優先度の低い順に示します。
|
|
すべて左結合です。
|
|
同じ優先度の演算子は、{ } で括ってあります。
|
|
.Bl -tag -width indent
|
|
.It Ar expr1 Li | Ar expr2
|
|
.Ar expr1
|
|
が空の文字列でも 0 でもない場合は
|
|
.Ar expr1
|
|
を評価した結果を返し、さもなければ
|
|
.Ar expr2
|
|
を評価した結果を返します。
|
|
.It Ar expr1 Li & Ar expr2
|
|
.Ar expr1
|
|
と
|
|
.Ar expr2
|
|
の各々の評価結果が、ともに空の文字列でも 0 でもない場合は
|
|
.Ar expr1
|
|
を評価した結果を返し、さもなければ 0 を返します。
|
|
.It Ar expr1 Li "{=, >, >=, <, <=, !=}" Ar expr2
|
|
.Ar expr1
|
|
と
|
|
.Ar expr2
|
|
がともに整数ならば整数としての比較結果を返し、さもなければ
|
|
文字列とみなして、ロカールに従った照合方法を用いた比較結果を
|
|
返します。
|
|
いずれの場合も、指定された関係が「真」ならば 1 を、「偽」ならば
|
|
0 を返します。
|
|
.It Ar expr1 Li "{+, -}" Ar expr2
|
|
整数値の引数に関して、加算あるいは減算した結果を返します。
|
|
.It Ar expr1 Li "{*, /, %}" Ar expr2
|
|
整数値の引数に関して、乗算、整数除算、または剰余の結果を返します。
|
|
.It Ar expr1 Li : Ar expr2
|
|
.Dq \&:
|
|
演算子は、
|
|
.Ar expr1
|
|
と
|
|
.Ar expr2
|
|
のパターンマッチを行います。
|
|
.Ar expr2
|
|
は、正規表現でなければなりません。
|
|
またこの正規表現は、暗黙のうちに
|
|
.Dq ^
|
|
が仮定されることにより、文字列の先頭から比較を始めることに
|
|
なります。
|
|
.Pp
|
|
パターンマッチが成功した場合、もし正規表現中に少なくとも1つ
|
|
.Dq "\e(...\e)"
|
|
の形の部分正規表現が含まれていたならば、このうち
|
|
.Dq "\e1"
|
|
に相当する文字列を返します。
|
|
このような部分正規表現が含まれていなければ、マッチした文字列の
|
|
長さを返します。
|
|
またパターンマッチが失敗した場合、もし部分正規表現が含まれて
|
|
いたならば空の文字列を返し、含まれていない場合は 0 を返します。
|
|
.El
|
|
.Pp
|
|
丸括弧
|
|
.Dq "()"
|
|
は通常と同じくグループ分けに用いることができます。
|
|
.Pp
|
|
.Nm
|
|
ユーティリティは、
|
|
演算子かもしれない引数とオペランドかもしれない引数を字句的には区別しません。
|
|
字句的に演算子と等しいオペランドは、構文エラーと解釈されます。
|
|
回避方法については、後述の使用例を参照してください。
|
|
.Pp
|
|
一般に
|
|
.Nm
|
|
コマンドの構文は、歴史的なもので不便です。
|
|
新規アプリケーションでは、
|
|
.Nm
|
|
の代りにシェルの数値演算を使用することをお勧めします。
|
|
.Ss 以前の実装との互換性
|
|
.Fx
|
|
4.x
|
|
互換性が有効にならない限り、本バージョンの
|
|
.Nm
|
|
は、
|
|
.Tn POSIX
|
|
Utility Syntax Guidelines を支持します。
|
|
このガイドラインでは、マイナス記号が付いている先行引数は、
|
|
プログラムに対するオプションとみなすことが必要です。
|
|
標準の
|
|
.Fl Fl
|
|
構文を使用し、このような解釈を避けられます。
|
|
しかしながら、以前の
|
|
.Fx
|
|
バージョンを含む多くの歴史的な
|
|
.Nm
|
|
実装は、この構文を許しません。
|
|
正しい解釈を保証する可搬性のある方法については、
|
|
後述の使用例を参照してください。
|
|
.Xr check_utility_compat 3
|
|
関数 (
|
|
.Fa utility
|
|
引数を
|
|
.Dq Li expr
|
|
にします) を使用して、互換モードを有効にすべきかどうか判定できます。
|
|
可搬的でない使用方法を避けるように簡単にできないような複雑なスクリプトで
|
|
.Nm
|
|
が使用されている場合に、
|
|
移行およびデバッグのためにこの機能を使用することを意図しています。
|
|
互換モードを有効にすると、暗黙的に
|
|
.Fl e
|
|
オプションを有効にします。
|
|
これは、
|
|
.Fx
|
|
における歴史的な
|
|
.Nm
|
|
の動作に合致するからです。
|
|
歴史的な理由で、環境変数
|
|
.Ev EXPR_COMPAT
|
|
を定義しても互換モードが有効になります。
|
|
.Sh 環境変数
|
|
.Bl -tag -width ".Ev EXPR_COMPAT"
|
|
.It Ev EXPR_COMPAT
|
|
設定すると、互換モードが有効になります。
|
|
.El
|
|
.Sh 使用例
|
|
.Bl -bullet
|
|
.It
|
|
.Xr ( sh 1
|
|
構文での) 以下の例は、変数
|
|
.Va a
|
|
に 1 を加えます:
|
|
.Dl "a=$(expr $a + 1)"
|
|
.It
|
|
.Va a
|
|
の値が負数だと、これは失敗します。
|
|
.Va a
|
|
が負数の場合に
|
|
.Nm
|
|
コマンドへのオプションだと解釈されないようにするには、
|
|
この式を次のようにする必要があります:
|
|
.Dl "a=$(expr 1 + $a)"
|
|
.It
|
|
より一般的には、負数となる可能性のある値は括弧で括ります:
|
|
.Dl "a=$(expr \e( $a \e) + 1)"
|
|
.It
|
|
以下の例は、変数
|
|
.Va a
|
|
に設定されたパス名のうち、
|
|
ファイル名に当たる部分を表示します。
|
|
.Va a
|
|
はパス
|
|
.Pa /
|
|
を表現している可能性があるので、
|
|
これが割り算の演算氏として解釈されないようにする必要があります。
|
|
.Li //
|
|
文字がこの曖昧性を解決します。
|
|
.Dl "expr \*q//$a\*q \&: '.*/\e(.*\e)'"
|
|
.El
|
|
.Pp
|
|
以下の例は、変数
|
|
.Va a
|
|
に含まれる文字の数を返します。
|
|
繰り返しになりますが、
|
|
.Va a
|
|
がハイフンで開始する可能性がある場合、
|
|
.Nm
|
|
へのオプションとして解釈されることを避ける必要があります。
|
|
.Bl -bullet
|
|
.It
|
|
.Nm
|
|
コマンドが
|
|
.St -p1003.1-2001
|
|
に適合している場合、これは単純です:
|
|
.Dl "expr -- \*q$a\*q \&: \*q.*\*q"
|
|
.It
|
|
一方、古いシステムへも可搬とするためには、より複雑なコマンドが必要となります:
|
|
.Dl "expr \e( \*qX$a\*q \&: \*q.*\*q \e) - 1"
|
|
.El
|
|
.Sh 診断
|
|
.Nm
|
|
ユーティリティは、以下の値のうち1つを返して終了します。
|
|
.Bl -tag -width indent -compact
|
|
.It 0
|
|
式は空文字列でも 0 でもない
|
|
.It 1
|
|
式は空文字列か、0 であった
|
|
.It 2
|
|
式が無効だった
|
|
.El
|
|
.Sh 関連項目
|
|
.Xr sh 1 ,
|
|
.Xr test 1 ,
|
|
.Xr check_utility_compat 3
|
|
.Sh 規格
|
|
.Nm expr
|
|
ユーティリティは、互換モードが有効でない場合には、
|
|
.St -p1003.1-2001
|
|
に適合します。
|
|
.Fl e
|
|
フラグは拡張です。
|