expr
: Evaluate expressionsexpr
evaluates an expression and writes the result on standard
output. Each token of the expression must be a separate argument.
Operands are either integers or strings. Integers consist of one or
more decimal digits, with an optional leading ‘-’.
expr
converts
anything appearing in an operand position to an integer or a string
depending on the operation being applied to it.
Strings are not quoted for expr
itself, though you may need to
quote them to protect characters with special meaning to the shell,
e.g., spaces. However, regardless of whether it is quoted, a string
operand should not be a parenthesis or any of expr
’s
operators like +
, so you cannot safely pass an arbitrary string
$str
to expr merely by quoting it to the shell. One way to
work around this is to use the GNU extension +
,
(e.g., + "$str" = foo
); a more portable way is to use
" $str"
and to adjust the rest of the expression to take
the leading space into account (e.g., " $str" = " foo"
).
You should not pass a negative integer or a string with leading
‘-’ as expr
’s first argument, as it might be
misinterpreted as an option; this can be avoided by parenthesization.
Also, portable scripts should not use a string operand that happens to
take the form of an integer; this can be worked around by inserting
leading spaces as mentioned above.
Operators may be given as infix symbols or prefix keywords. Parentheses may be used for grouping in the usual manner. You must quote parentheses and many operators to avoid the shell evaluating them, however.
Because expr
uses multiple-precision arithmetic, it works
with integers wider than those of machine registers.
The only options are --help and --version. See Common options. Options must precede operands.
Exit status:
0 if the expression is neither null nor 0, 1 if the expression is null or 0, 2 if the expression is invalid, 3 if an internal error occurred (e.g., arithmetic overflow).