.\" You may copy, distribute and modify under the terms of the LDP General .\" Public License as specified in the LICENSE file that comes with the .\" gnumaniak distribution .\" .\" The author kindly requests that no comments regarding the "better" .\" suitability or up-to-date notices of any info documentation alternative .\" is added without contacting him first. .\" .\" (C) 1999-2002 Ragnar Hojland Espinosa .\" .\" GNU expr man page .\" man pages are NOT obsolete! .\" .\" .\" Japanese Version Copyright (c) 2000 NAKANO Takeo all rights reserved. .\" Translated Sun 12 Mar 2000 by NAKANO Takeo .\" Updated & Modified Sat Jan 24 13:37:04 JST 2004 .\" by Yuichi SATO .\" .\"WORD: token トークン .\"WORD: operand オペランド .\"WORD: null (character) ナル(文字) .\"WORD: operator 演算子 .\"WORD: subexpression 副表現 .\" .TH expr 1 "18 June 2002" "GNU Shell Utilities 2.1" .SH 名前 expr \- 式を評価する .SH 書式 .BI "expr " expression... .sp .B expr [\-\-help] [\-\-version] .br .SH 説明 .B expr は式を評価し、その結果を標準出力に書き出す。 式のトークン (token) はそれぞれ別々の引数で与える必要がある。 .P オペランド (operand) は数字または文字列である。 .B expr はオペランドの位置に現れたものを、それに対して行われる演算に応じて 整数または文字列に変換する。 文字列は .B expr ではクォートしなくてよいが、 シェルから保護するための引用符が必要かもしれない (スペースなど)。 .P 演算子は 2 項間に挿入されるシンボルとして、 または前置されるキーワードとして与えられる。 括弧も通常のようにグループ化に利用できる (しかしシェルによる解釈を避けるためには括弧をクォートしなければならない)。 .P .B expr は以下の終了ステータスを返す: .br 0: 式がナルでも 0 でもない .br 1: 式がナルまたは 0 .br 2: 式が正しくない .SH 演算子 (優先度順) .SS 関係演算 .IP "\fB|\fP" 左項がナルでも 0 でもなければ左項を返す。 ナルや 0 だった場合は右項を返す。 これは通常の `or' 演算にあたる。 .IP "\fB&\fP" 左項、右項ともナルでも 0 でもなければ左項を返す。 それ以外の場合は 0 となる。 .IP "\fB<\fP\0 \fB<=\fP\0 \fB=\fP\0 \fB==\fP\0 \fB!=\fP\0 \fB>=\fP\0 \fB>\fP" 両項を比較し、関係が真なら 1、偽なら 0 を返す (\fI==\fP は \fI=\fPと同義)。 \fBexpr\fP はまず両方の項を数値に変換し、 数値的な比較を行おうとする。 どちらかの引数が数値に変換できなかった場合は辞書的な比較を行う。 .SS 数値演算 .IP "\fB+\fP\0 \fB-\fP" 代数的な加減算を行う。 左右の項は数値に変換され、失敗した場合はエラーとなる。 .IP "\fB*\fP\0 \fB/\fP\0 \fB%\fP" 代数的な乗算・除算・剰余演算を行う (`%' は C の場合と同じく剰余演算に対応する)。 左右の項は数値に変換され、これに失敗した場合はエラーとなる。 .SS 文字列演算 .IP "\fIstring\fP \fB:\fP \fIregex\fP" パターンマッチを実行する。 左右の項は文字列に変換され、 右項は (\fBgrep\fP(1) の使う基本的な) 正規表現として扱われる。 右項には暗黙のうちに先頭に `^' が自動的に付加され、 左項がその正規表現にマッチするかのテストが行われる。 マッチが成功した場合、 正規表現の一部が `\e(' と '\e)' で囲われていれば、 \fB:\fP 演算子は \fIstring\fP のうち、 副表現 (subexpression) にマッチした部分を返す。 それ以外の場合はマッチした部分の文字数が返される。 マッチに失敗した場合、 `\e(' と `\e)' が使われていた場合にはナル文字列が、 そうでない場合には 0 が返される。 `\e(' と `\e)' のペアのうち、最初のものだけが返り値に影響する。 それ以外のペアは、正規表現の演算子をグループ化するという意味だけを持つ。 他の .B expr と異なり、`+' (1 つ以上)、`?' (0 または 1)、`|' (or 接続) もマッチング演算子として認識される。 .TP さらに、以下のキーワードも認識される: .TP .BI index " string charset" \fIcharset\fP にあるどれかの文字が \fIstring\fP に見付かれば、 その最初に見付かった位置を返す。どの文字も見付からなければ 0 を返す。 .TP .BI length " string" \fIstring\fP の長さを返す。 .TP .BI match " string regex" パターンマッチを行う別のやり方。 これは ``\fIstring\fP \fB:\fP \fIregex\fP'' と同じ。 .TP .BI quote " string" \fIstring\fP を (演算子またはキーワードが含まれていても) 通常の文字列とみなす。 環境変数 \fBPOSIXLY_CORRECT\fR が設定されていると無効になる。 .TP .BI substr " string position length" \fIstring\fP の部分文字列を返す。 部分文字列は \fIstring\fP の \fIposition\fP から始まり、 最大 \fIlength\fP の長さを持つ。 \fIposition\fP や \fIlength\fP が正でなかったり数値でなかった場合は、 ナル文字列を返す。 .PP 括弧は通常のグループ化の意味に用いることができる。 キーワード (match, substr, index, length) は文字列として用いることはできない。 .SH オプション GNU .B expr が引数 1 つだけで起動された場合には、 以下のオプションが認識される: .TP .B "\-\-help" 標準出力に使用方法のメッセージを出力して正常終了する。 .TP .B "\-\-version" 標準出力にバージョン情報を出力して正常終了する。 .SH 例 .PP シェル変数 .I foo に 1 を加える: .IP foo=\`expr $a + 1\` .PP 変数 .IR bar に格納されているファイル名のうち、 ディレクトリ以外の部分を表示する .RI ( bar の値には `/' が含まれていなくても良い): .IP expr $bar : \'.*/\e(\^.*\e)\' \'\^|\' $a .PP 文字列 `abc' に文字 `b' をマッチさせる: .IP expr abc : 'a\e(.\e)c' .PP 文字列 `abcdef' に `c' または `z' のいずれかが存在している位置を探す: .IP expr index abcdef cz .PP キーワード (index) を文字列として用いている誤った例: .IP expr index index a .PP キーワード (index) を文字列として用いている正しい例: .IP expr index quote index d .SH 注意 プログラムのバグについては bug-sh-utils@gnu.org に報告してください。 ページの更新は Ragnar Hojland Espinosa が行っています。