expr(1) expr(1)NAME expr - evaluate arguments as an expression SYNOPSIS expr arguments DESCRIPTION expr evaluates its arguments as an expression and writes the result on the standard output. Terms of the expression must be separated by blanks. Characters special to the Bourne shell or Korn shell (sh (1) or ksh (1), respectively) must be escaped. (expr is replaced in the C shell (csh (1)) by @.) Note that 0 is returned to indicate a zero value, rath- er than the null string. Strings containing blanks or other special characters should be quoted. Integer-valued argu- ments may be preceded by a unary minus sign. Internally, integers are treated as 32-bit, 2's-complement numbers. The operators and keywords are listed below. Characters that need to be escaped are preceded by \. The list is in order of increasing precedence, with equal precedence opera- tors grouped within {} symbols. expr \| expr returns the first expr if it is neither null nor 0, oth- erwise returns the second expr. expr \& expr returns the first expr if neither expr is null or 0, oth- erwise returns 0. expr { =, \>, \>=, \<, \<=, != } expr returns the result of an integer comparison if both argu- ments are integers, otherwise returns the result of a lexical comparison. expr { +, - } expr addition or subtraction of integer-valued arguments. expr { \*, /, % } expr multiplication, division, or remainder of the integer- valued arguments. expr : expr The matching operator : compares the first argument with the second argument which must be a regular expression; regular expression syntax is the same as that of ed(1), except that all patterns are anchored (i.e., begin with ^) and, therefore, ^ is not a special character, in that context. Normally, the matching operator returns the number of characters matched (0 on failure). Alterna- tively, the .) pattern symbols can be used to return a April, 1990 1
expr(1) expr(1)portion of the first argument. EXAMPLES a=`expr $a + 1` adds 1 to the shell variable a. # 'For $a equal to either "/usr/abc/file" # or just "file"' expr $a : '.*/\(.*\)' \ | $a returns the last segment of a pathname (i.e., file). Watch out for / alone as an argument: expr will take it as the division operator (see BUGS below). A better representation of above example: expr //$a : '.*/\(.*\)' the addition of the // characters eliminates any ambiguity about the division operator and simplifies the whole expres- sion. expr $VAR : '.*' returns the number of characters in $VAR. FILES /bin/expr SEE ALSO csh(1), ed(1), ksh(1), sh(1). EXIT CODE As a side effect of expression evaluation, expr returns the following exit values: 0 if the expression is neither null nor 0 1 if the expression is null or 0 2 for invalid expressions DIAGNOSTICS syntax error for operator/operand errors non-numeric argument if arithmetic is attempted on such a string BUGS After argument processing by the shell, expr cannot tell the difference between an operator and an operand except by the value. If $a is an =, the command: 2 April, 1990
expr(1) expr(1)expr $a = '=' looks like: expr = = = as the arguments are passed to expr (and they will all be taken as the = operator). The following works: expr X$a = X= April, 1990 3