EXPR(1B) | BSD Compatibility Package Commands | EXPR(1B) |
expr - evaluate arguments as a logical, arithmetic, or string expression
/usr/ucb/expr argument...
The expr utility evaluates expressions as specified by its arguments. After evaluation, the result is written on the standard output. Each token of the expression is a separate argument, so terms of the expression must be separated by blanks. Characters special to the shell must be escaped. Note: 0 is returned to indicate a zero value, rather than the null string. Strings containing blanks or other special characters should be quoted. Integer-valued arguments may be preceded by a unary minus sign. Internally, integers are treated as 32-bit, two's-complement numbers.
The operators and keywords are listed below. Characters that need to be escaped are preceded by `\'. The list is in order of increasing precedence, with equal precedence operators grouped within {} symbols.
expr \| expr
expr \& expr
expr { =, \, \ , \<, \<=, != } expr
expr { +, − } expr
expr { \, /, % } expr
string : regular-expression
match string regular-expression
substr string integer-1 integer-2
index string character-list
length string
( expr )
Example 1 Adding an integer to a shell variable
Add 1 to the shell variable a.
a='expr $a + 1'
Example 2 Returning a path name segment
Return the last segment of a path name (that is, the filename part). Watch out for / alone as an argument: expr will take it as the division operator (see BUGS below).
# 'For $a equal to either "/usr/abc/file" or just "file"' expr $a : '.*/\ \ $a
Example 3 Using // characters to simplify the expression
The addition of the // characters eliminates any ambiguity about the division operator and simplifies the whole expression.
# A better representation of example 2. expr //$a : '.*/\
Example 4 Returning the value of a variable
Returns the number of characters in $VAR.
expr $VAR : '.*'
expr returns the following exit codes:
0
1
2
syntax error
non-numeric argument
division by zero
After argument processing by the shell, expr cannot tell the difference between an operator and an operand except by the value. If $a is an =, the command:
expr $a = '='
looks like:
expr = = =
as the arguments are passed to expr (and they will all be taken as the = operator). The following works:
expr X$a = X=
Note: the match, substr, length, and index operators cannot themselves be used as ordinary strings. That is, the expression:
example% expr index expurgatorious length syntax error example%
generates the `syntax error' message as shown instead of the value 1 as you might expect.
June 6, 2000 | OmniOS |