[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
expr
: 式を評価するexpr
は、式を評価して、結果を標準出力に書き出す。式の各構成要素
(token) は、独立した引数でなければならない。
オペランド (演算対象) は、整数か文字列である。整数は、1 個以上の
10 進数の数字から構成され、先頭に ‘-’ が付いていてもよい。expr
は、
オペランドの位置にあるものが何であれ、それを整数、または、文字列に変換する。
どちらになるかは、それに対して行われる演算次第である。
expr
そのものに対しては、文字列をクォートする必要がない。
だが、シェルにとって特別な意味がある、たとえば空白のような文字を保護するためには、
文字列を引用符で囲むなどの方法でクォートする必要があるかもしれない。
とは言え、クォートされているかどうかに関わりなく、文字列のオペランドは、
丸カッコ 1 個であってはならないし、+
のような expr
の演算子の一つであるべきでもない。すなわち、シェルに対してクォートするだけでは、
エラーを引き起こすことなく、任意の文字列 $str
を expr
に渡すことはできないのだ。この問題を回避する方法の一つは、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: 内部エラーが起きた場合 (例: 算術オーバーフロー)。 |
16.4.1 文字列式 | 文字列式 (+ : match substr index length)。 | |
16.4.2 数式 | ||
16.4.3 expr の関係表現 | 論理結合と関係表現 (| & < <= = == != >= >)。 | |
16.4.4 expr の使用例 | 用例。 |
This document was generated on June 7, 2022 using texi2html 1.82.