# EXPR(1) - General Commands Manual #

EXPR(1) - General Commands Manual

## NAME #

**expr** - evaluate expression

## SYNOPSIS #

**expr**
*expression …*

## DESCRIPTION #

The
**expr**
utility evaluates each
*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

expr1if it is neither an empty string nor zero; otherwise, returns the evaluation ofexpr2.

*expr1* `&`

*expr2*

Returns the evaluation of

expr1if 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 matchesexpr1againstexpr2, 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

exprreturns 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
Version7 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.

OpenBSD 7.5 - December 22, 2022