EXPR(1)

NAME
expr - evaluate arguments as an expression

SYNOPSIS
expr arg ...

DESCRIPTION

Expr evaluates expressions as specified by its arguments. Each token of the expression is a separate argument. After evaluation, the result is written on the standard output.

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
    yields `1' if the indicated comparison is true, `0' if false. The comparison is numeric if both expr are integers, otherwise the comparison is lexicographic. relop is one of < (less than), <= (less than or equal to), = (equal to), != (not equal to), >= (greater than or equal to), and > (greater than).

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

match string regular-expression
    The two forms of the matching operator above are synonymous. 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). 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).

substr string integer-1 integer-2
    extracts the subtring of string starting at position integer-1 and of length integer-2 characters. If integer-1 has a value greater than the length of string, expr returns a null string. If you try to extract more characters than there are in string, expr returns all the remaining characters from string. Beware of using negative values for either integer-1 or integer-2 as expr tends to run forever in these cases.

index string character-list
    reports the first position in string at which any one of the characters in character-list matches a character in string.

length string
    returns the length (that is, the number of characters) of string.

( expr )
    parentheses for grouping.

EXAMPLES

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.

SEE ALSO
sh(1), test(1)

DIAGNOSTICS
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.

BUGS

Note that the match, substr, length, and index operators cannot themselves be used as ordinary strings. That is, the expression:
    tutorial% expr index expurgatorious length
    syntax error
    tutorial%
generates the `syntax error' message as shown instead of the value 1 as you might expect.