| .Dd 2015-10-08 |
| .Dt EXPR 1 |
| .Os sbase |
| .Sh NAME |
| .Nm expr |
| .Nd evaluate expression |
| .Sh SYNOPSIS |
| .Nm |
| .Ar expression |
| .Sh DESCRIPTION |
| .Nm |
| evaluates |
| .Ar expression |
| and writes the result to stdout. |
| .Pp |
| There are two elemental expressions, |
| .Sy integer |
| and |
| .Sy string. |
| Let |
| .Sy expr |
| be a non-elemental expression and |
| .Sy expr1 , |
| .Sy expr2 |
| arbitrary expressions. Then |
| .Sy expr |
| has the recursive form |
| .Sy expr = [(] expr1 operand expr2 [)]. |
| .Pp |
| With |
| .Sy operand |
| being in order of increasing precedence: |
| .Bl -tag -width Ds |
| .It | |
| Evaluate to |
| .Sy expr1 |
| if it is neither an empty string nor 0; otherwise evaluate to |
| .Sy expr2 . |
| .It & |
| Evaluate to |
| .Sy expr1 |
| if |
| .Sy expr1 |
| and |
| .Sy expr2 |
| are neither empty strings nor 0; otherwise evaluate to 0. |
| .It = > >= < <= != |
| If |
| .Sy expr1 |
| and |
| .Sy expr2 |
| are integers, evaluate to 1 if the relation is true and 0 if it is false. |
| If |
| .Sy expr1 |
| and |
| .Sy expr2 |
| are strings, apply the relation to the return value of |
| .Xr strcmp 3 . |
| .It + - |
| If |
| .Sy expr1 |
| and |
| .Sy expr2 |
| are integers, evaluate to their sum or subtraction. |
| .It * / % |
| If |
| .Sy expr1 |
| and |
| .Sy expr2 |
| are integers, evaluate to their multiplication, division or remainder. |
| .It : |
| Evaluate to the number of characters matched in |
| .Sy expr1 |
| against |
| .Sy expr2 . expr2 |
| is anchored with an implicit '^'. |
| .Pp |
| You can't directly match the empty string, since zero matched characters |
| resolve equally to a failed match. To work around this limitation, use |
| "expr X'' : 'X$' instead of "expr '' : '$'" |
| .El |
| .Sh EXIT STATUS |
| .Bl -tag -width Ds |
| .It 0 |
| .Ar expression |
| is neither an empty string nor 0. |
| .It 1 |
| .Ar expression |
| is an empty string or 0. |
| .It 2 |
| .Ar expression |
| is invalid. |
| .It > 2 |
| An error occurred. |
| .El |
| .Sh SEE ALSO |
| .Xr test 1 |
| .Sh STANDARDS |
| The |
| .Nm |
| utility is compliant with the |
| .St -p1003.1-2013 |
| specification. |