sbase/expr.1

106 lines
1.7 KiB
Groff
Raw Permalink Normal View History

.Dd 2015-10-08
.Dt EXPR 1
.Os sbase
2014-09-29 09:22:59 -04:00
.Sh NAME
.Nm expr
.Nd evaluate expression
.Sh SYNOPSIS
.Nm
2014-09-29 09:22:59 -04:00
.Ar expression
.Sh DESCRIPTION
.Nm
evaluates
2014-09-29 09:22:59 -04:00
.Ar expression
and writes the result to stdout.
2014-09-29 09:22:59 -04:00
.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 [)].
2014-09-29 09:22:59 -04:00
.Pp
With
.Sy operand
2015-02-01 15:28:17 -05:00
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
2015-02-01 15:28:17 -05:00
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 '^'.
2014-09-29 09:22:59 -04:00
.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 ''
: '$'"
2014-09-29 09:22:59 -04:00
.El
.Sh EXIT STATUS
.Bl -tag -width Ds
2014-09-29 09:22:59 -04:00
.It 0
.Ar expression
2015-02-09 18:34:24 -05:00
is neither an empty string nor 0.
2014-09-29 09:22:59 -04:00
.It 1
.Ar expression
2015-02-09 18:34:24 -05:00
is an empty string or 0.
2014-09-29 09:22:59 -04:00
.It 2
.Ar expression
2015-02-09 18:34:24 -05:00
is invalid.
.It > 2
2015-02-09 18:34:24 -05:00
An error occurred.
2014-09-29 09:22:59 -04:00
.El
.Sh SEE ALSO
.Xr test 1
2014-09-29 09:22:59 -04:00
.Sh STANDARDS
The
.Nm
utility is compliant with the
.St -p1003.1-2013
2014-09-29 09:22:59 -04:00
specification.