1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
.\" 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 <ragnar@ragnar-hojland.com>
.\"
.\" GNU expr man page
.\" man pages are NOT obsolete!
.\" <ragnar@ragnar-hojland.com>
.\"
.\" Japanese Version Copyright (c) 2000 NAKANO Takeo all rights reserved.
.\" Translated Sun 12 Mar 2000 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
.\" Updated & Modified Sat Jan 24 13:37:04 JST 2004
.\" by Yuichi SATO <ysato444@yahoo.co.jp>
.\"
.\"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
<ragnar@ragnar-hojland.com> が行っています。
|