Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
EXPR(1)			  BSD General Commands Manual		       EXPR(1)

     expr -- evaluate expression

     expr expression

     The expr utility evaluates	expression and writes the result on standard

     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
	     integers; otherwise, returns the results of string	comparison us-
	     ing 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 integer-valued

     expr1 {*, /, %} expr2
	     Returns the results of multiplication, integer division, or re-
	     mainder of	integer-valued arguments.

     expr1 : expr2
	     The ":" operator matches expr1 against expr2, which must be a
	     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 regu-
	     lar 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 0.

     (	expr  )
	     Parentheses are used for grouping in the usual manner.

     Additionally, the following keywords are recognized:

     length expr
	     Returns the length	of the specified string	in bytes.

     Operator precedence (from highest to lowest):
	   1.	parentheses
	   2.	length
	   3.	":"
	   4.	"*", "/", and "%"
	   5.	"+" and	"-"
	   6.	compare	operators
	   7.	"&"
	   8.	"|"

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

     1.	  The following	example	adds one to the	variable a.
		a=`expr	$a + 1`

     2.	  The following	example	returns	zero, due to subtraction having	higher
	  precedence than '&' operator.
		expr 1 '&' 1 - 1

     3.	  The following	example	returns	the filename portion of	a pathname
	  stored in variable a.
		expr /$a : '.*/\(.*\)'

     4.	  The following	example	returns	the number of characters in variable
		expr $a	: '.*'

     This implementation of expr internally uses 64 bit	representation of in-
     tegers and	checks for over- and underflows.  It also treats / (division
     mark) and option '--' correctly depending upon context.

     expr on other systems (including NetBSD up	to and including NetBSD	1.5)
     might not be so graceful.	Arithmetic results might be arbitrarily	lim-
     ited on such systems, most	commonly to 32 bit quantities.	This means
     such expr can only	process	values between -2147483648 and +2147483647.

     On	other systems, expr might also not work	correctly for regular expres-
     sions where either	side contains single forward slash, like this:

	   expr	/ : '.*/\(.*\)'

     If	this is	the case, you might use	// (double forward slash) to avoid
     confusion with the	division operator:

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

     According to IEEE Std 1003.2 ("POSIX.2"), expr has	to recognize special
     option '--', treat	it as an end of	command	line options and ignore	it.
     Some expr implementations don't recognize it at all, others might ignore
     it	even in	cases where doing so results in	syntax error.  There should be
     same result for both following examples, but it might not always be:
	   1.	expr --	: .
	   2.	expr --	-- : .
     Although NetBSD expr handles both cases correctly,	you should not depend
     on	this behavior for portability reasons and avoid	passing	bare '--' as
     first argument.

     The expr utility conforms to IEEE Std 1003.2 ("POSIX.2").	The length
     keyword is	an extension for compatibility with GNU	expr.

     Original implementation was written by J.T. Conklin <>.  It
     was rewritten for NetBSD 1.6 by
     Jaromir Dolecek <>.

     The empty string "" cannot	be matched with	the intuitive:

	   expr	'' : '$'

     The reason	is that	the returned number of matched characters (zero) is
     indistinguishable from a failed match, so this returns failure.  To match
     the empty string, use something like:

	   expr	x'' : 'x$'

BSD				April 20, 2004				   BSD


Want to link to this manual page? Use this URL:

home | help