suckless unix tools
git clone git://
Log | Files | Refs | README | LICENSE

commit d348bb22c9368aa96b3edafa8285a009c5fe08b6
parent a1784b721d19c7f1743e1779f3037cd15b91acf5
Author: sin <>
Date:   Mon Sep 29 14:22:59 +0100

Add expr.1

expr.1 | 156+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 156 insertions(+), 0 deletions(-)
diff --git a/expr.1 b/expr.1 @@ -0,0 +1,156 @@ +.\" $OpenBSD: src/bin/expr/expr.1,v 1.22 2014/02/23 18:13:27 schwarze Exp $ +.\" $NetBSD: expr.1,v 1.9 1995/04/28 23:27:13 jtc Exp $ +.\" +.\" Written by J.T. Conklin <>. +.\" Public domain. +.\" +.Dd $Mdocdate: September 3 2010 $ +.Dt EXPR 1 +.Os +.Sh NAME +.Nm expr +.Nd evaluate expression +.Sh SYNOPSIS +.Nm expr +.Ar expression +.Sh DESCRIPTION +The +.Nm +utility evaluates +.Ar expression +and writes the result on standard output. +All operators are separate arguments to the +.Nm +utility. +Characters special to the command interpreter must be escaped. +.Pp +Operators are listed below in order of increasing precedence. +Operators with equal precedence are grouped within { } symbols. +.Bl -tag -width indent +.It Ar expr1 | expr2 +Returns the evaluation of +.Ar expr1 +if it is neither an empty string nor zero; +otherwise, returns the evaluation of +.Ar expr2 . +.It Ar expr1 Li & Ar expr2 +Returns the evaluation of +.Ar expr1 +if neither expression evaluates to an empty string or zero; +otherwise, returns zero. +.It Ar expr1 Li "{=, >, >=, <, <=, !=}" Ar expr2 +Returns the results of integer comparison if both arguments are 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. +.It Ar expr1 Li "{+, -}" Ar expr2 +Returns the results of addition or subtraction of integer-valued arguments. +.It Ar expr1 Li "{*, /, %}" Ar expr2 +Returns the results of multiplication, integer division, or remainder of +integer-valued arguments. +.It Ar expr1 Li : Ar expr2 +The +.Ql \&: +operator matches +.Ar expr1 +against +.Ar expr2 , +which must be a basic regular expression. +The regular expression is anchored +to the beginning of the string with an implicit +.Ql ^ . +.Pp +If the match succeeds and the pattern contains at least one regular +expression subexpression +.Dq "\e(...\e)" , +the string corresponding to +.Dq "\e1" +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. +.Pp +Note: the empty string cannot be matched using +.Bd -literal -offset indent +expr '' : '$' +.Ed +.Pp +This is because the returned number of matched characters +.Pq zero +is indistinguishable from a failed match, so +.Nm +returns failure +.Pq 0 . +To match the empty string, use a structure such as: +.Bd -literal -offset indent +expr X'' : 'X$' +.Ed +.El +.Pp +Parentheses are used for grouping in the usual manner. +.Sh EXIT STATUS +The +.Nm +utility exits with one of the following values: +.Pp +.Bl -tag -width Ds -offset indent -compact +.It 0 +The expression is neither an empty string nor 0. +.It 1 +The expression is an empty string or 0. +.It 2 +The expression is invalid. +.It \*(Gt2 +An error occurred (such as memory allocation failure). +.El +.Sh EXAMPLES +Add 1 to the variable +.Va a : +.Bd -literal -offset indent +$ a=`expr $a + 1` +.Ed +.Pp +Return the filename portion of a pathname stored +in variable +.Va a . +The +.Ql // +characters act to eliminate ambiguity with the division operator: +.Bd -literal -offset indent +$ expr "//$a" \&: '.*/\e(.*\e)' +.Ed +.Pp +Return the number of characters in variable +.Va a : +.Bd -literal -offset indent +$ expr $a \&: '.*' +.Ed +.Sh SEE ALSO +.Xr test 1 , +.Xr re_format 7 +.Sh STANDARDS +The +.Nm +utility is compliant with the +.St -p1003.1-2008 +specification. +.Sh HISTORY +The +.Nm +utility first appeared in the Programmer's Workbench (PWB/UNIX) +and has supported regular expressions since +.At v7 . +It was rewritten from scratch for +.Bx 386 0.1 +and again for +.Nx 1.1 . +.Sh AUTHORS +.An -nosplit +The first free version was written by +.An Pace Willisson +in 1992. +This version was written by +.An John T. Conklin +in 1994.