## NAME

`expr`

—
evaluate expression

## SYNOPSIS

`expr` |
expression |

## DESCRIPTION

The `expr`

utility evaluates
`expression` and writes the result on standard output.
All operators are separate arguments to the `expr`

utility. Characters special to the command interpreter must be escaped.

Operators are listed below in order of increasing precedence. Operators with equal precedence are grouped within { } symbols.

`expr1`|`expr2`- Returns the evaluation of
`expr1`if it is neither an empty string nor zero; otherwise, returns the evaluation of`expr2`. `expr1``&`

`expr2`- Returns the evaluation of
`expr1`if neither expression evaluates to an empty string or zero; otherwise, returns zero. `expr1``{=, >, >=, <, <=, !=}`

`expr2`- Returns the results of integer comparison if both arguments are decimal integers; otherwise, returns the results of string comparison using the locale-specific collation sequence. The result of each comparison is 1 if the specified relation is true, or 0 if the relation is false.
`expr1``{+, -}`

`expr2`- Returns the results of addition or subtraction of decimal integer-valued arguments.
`expr1``{*, /, %}`

`expr2`- Returns the results of multiplication, integer division, or remainder of decimal integer-valued arguments.
`expr1``:`

`expr2`- The ‘
`:`

’ operator matches`expr1`against`expr2`, which must be a basic regular expression. The regular expression is anchored to the beginning of the string with an implicit ‘`^`

’.If the match succeeds and the pattern contains at least one regular expression subexpression “\(...\)”, the string corresponding to “\1” is returned; otherwise, the matching operator returns the number of characters matched. If the match fails and the pattern contains a regular expression subexpression the null string is returned; otherwise, returns 0.

Note: the empty string cannot be matched using

expr '' : '$'

This is because the returned number of matched characters (zero) is indistinguishable from a failed match, so

`expr`

returns failure (0). To match the empty string, use a structure such as:expr X'' : 'X$'

Parentheses are used for grouping in the usual manner.

## EXIT STATUS

The `expr`

utility exits with one of the
following values:

- 0
- The expression is neither an empty string nor 0.
- 1
- The expression is an empty string or 0.
- 2
- The expression is invalid.
- >2
- An error occurred (such as memory allocation failure).

## EXAMPLES

Add 1 to the variable `a`:

$ a=`expr $a + 1`

Return the filename portion of a pathname stored in variable
`a`. The ‘`//`

’
characters act to eliminate ambiguity with the division operator:

$ expr "//$a" : '.*/\(.*\)'

Return the number of characters in variable
`a`:

$ expr $a : '.*'

## SEE ALSO

## STANDARDS

The `expr`

utility is compliant with the
IEEE Std 1003.1-2008 (“POSIX.1”)
specification.

## HISTORY

The `expr`

utility first appeared in the
Programmer's Workbench (PWB/UNIX) and has supported regular expressions
since Version 7 AT&T UNIX. It was
rewritten from scratch for 386BSD-0.1 and again for
NetBSD 1.1.

## AUTHORS

The first free version was written by Pace Willisson in 1992. This version was written by John T. Conklin in 1994.