[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.4 expr: 式を評価する

expr は、式を評価して、結果を標準出力に書き出す。式の各構成要素 (token) は、独立した引数でなければならない。

オペランド (演算対象) は、整数か文字列である。整数は、1 個以上の 10 進数の数字から構成され、先頭に ‘-’ が付いていてもよい。expr は、 オペランドの位置にあるものが何であれ、それを整数、または、文字列に変換する。 どちらになるかは、それに対して行われる演算次第である。

expr そのものに対しては、文字列をクォートする必要がない。 だが、シェルにとって特別な意味がある、たとえば空白のような文字を保護するためには、 文字列を引用符で囲むなどの方法でクォートする必要があるかもしれない。 とは言え、クォートされているかどうかに関わりなく、文字列のオペランドは、 丸カッコ 1 個であってはならないし、+ のような expr の演算子の一つであるべきでもない。すなわち、シェルに対してクォートするだけでは、 エラーを引き起こすことなく、任意の文字列 $strexpr に渡すことはできないのだ。この問題を回避する方法の一つは、GNU の拡張である + 演算子 (訳注: この + は、算術演算子の + ではなく、直後に来る引数が文字列であることを示す文字列演算子である) を使用することだ (たとえば、+ "$str" = foo といった具合に)。もっと移植性のある方法は、 " $str" という先頭に空白を入れた表現を使用し、 式の残りの部分でもそれに合わせて、先頭のスペースを考慮に入れるようにすることである (たとえば、" $str" = " foo" のように)。

負の整数や、‘-’ で始まる文字列を expr の 1 番目の引数として渡すべきではない。オプションと間違われかねないからだ。 それを避けるためには、カッコでくくればよい (訳注: たとえば、 expr \( -1 + 1 \))。また、移植を考慮したスクリプトでは、 文字列のオペランドに、形が整数と同じになってしまうものを使うべきではない。 こちらは、先頭にスペースを入れる上記の方法で回避できる。

演算子には、記号としてオペランドとオペランドの間に置くものもあれば、 キーワードとしてオペランドの前に付けるものもある。 丸カッコは、おなじみのやり方で、グループ化に使用できる。 ただし、丸カッコや、演算子の多くは、シェルによって評価されないように、 クォートしなければならない。

GNU MP ライブラリ対応でビルドされた場合、expr は任意精度演算を使用する。そうでない場合は、ネイティブな算術型を使用するので、 算術オーバーフローのために実行に失敗することがあるかもしれない。

指定できるオプションは、‘--help’ と ‘--version’ だけである。 See section 共通オプション. オプションはオペランドの前に置かなければならない。

終了ステータス:

 
0: 式が null でも 0 でもない場合。
1: 式が null または 0 の場合。
2: 式が無効な場合。
3: 内部エラーが起きた場合 (例: 算術オーバーフロー)。

This document was generated on June 7, 2022 using texi2html 1.82.