expr - evaluate arguments as an expression
The arguments are taken as an expression. After evaluation, the
result is written on the standard output. Each token of the expression is a
separate argument.
The operators and keywords are listed below. The list is in order
of increasing precedence, with equal precedence operators grouped.
- expr | expr
- yields the first expr if it is neither null nor `0', otherwise
yields the second expr.
- expr & expr
- yields the first expr if neither expr is null or `0',
otherwise yields `0'.
- expr relop expr
- where relop is one of < <= = != >= >, yields `1' if the
indicated comparison is true, `0' if false. The comparison is numeric if
both expr are integers, otherwise lexicographic.
- expr +
expr
-
expr - expr
addition or subtraction of the arguments.
- expr *
expr
-
expr / expr
expr % expr
multiplication, division, or remainder of the arguments.
- expr :
expr
- The matching operator compares the string first argument with the regular
expression second argument. Regular expression syntax is the same as that
of ed(1); /usr/5bin/expr uses simple regular expressions,
/usr/5bin/posix/expr, /usr/5bin/posix2001/expr, and
/usr/5bin/s42/expr use basic regular expressions. The
\(...\) pattern symbols can be used to select a portion of the
first argument. Otherwise, the matching operator yields the number of
characters matched (`0' on failure).
- match expr expr
- Same as expr : expr.
- ( expr )
- parentheses for grouping.
- string
- Yields itself unless it is part of a larger expression. With
/usr/5bin/posix/expr and /usr/5bin/posix2001/expr, all
strings that form valid decimal numbers are converted to the
canonical form.
The following operators are supported only by
/usr/5bin/s42/expr or if the SYSV3 environment variable is
set:
- length string
- Returns the number of characters in string.
- substr string index count
- Returns a string that consists of count characters beginning at
position index of string (starting at 1).
- index string set
- Returns the index in string (starting at 1) of the first occurrence
of one of the characters in set, or 0 if no character is
found.
- LANG,
LC_ALL
- See locale(7).
- LC_COLLATE
- Sets the collation sequence for string comparison, and for range
expressions, equivalence classes, and collation symbols in basic regular
expressions.
- LC_CTYPE
- Determines the mapping of bytes to characters in regular expressions, for
the match, length, substr, and index operators, and the availability and
composition of character classes in basic regular expressions.
- SYSV3
- Enables some additional operators as described above.
To add 1 to the Shell variable a:
- a=`expr $a + 1`
To find the filename part (least significant part) of the pathname
stored in variable a, which may or may not contain `/':
- expr "$a" : ´.*/\(.*\)´ ´|´
"$a"
Note the quoted Shell metacharacters. Also note that this example
generates wrong results if the result of the substitution is `0' or if `$a'
equals one of the expr operators. Be sure that your code avoids such
problems and use basename(1) if to actually cut out filename
parts.
Expr returns the following exit codes:
0 if the expression is neither null nor `0',
1 if the expression is null or `0',
2 for invalid expressions.
Integers are treated as 64-bit, 2's complement numbers.