sbase/expr.1

104 lines
1.7 KiB
Groff
Raw Normal View History

.Dd January 25, 2015
.Dt EXPR 1
.Os sbase
2014-09-29 13:22:59 +00:00
.Sh NAME
.Nm expr
.Nd evaluate expression
.Sh SYNOPSIS
.Nm
2014-09-29 13:22:59 +00:00
.Ar expression
.Sh DESCRIPTION
.Nm
evaluates
2014-09-29 13:22:59 +00:00
.Ar expression
and writes the result to stdout.
2014-09-29 13:22:59 +00: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 13:22:59 +00:00
.Pp
With
.Sy operand
being in oder 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 mulitplication, 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 13:22:59 +00: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 13:22:59 +00:00
.El
.Sh EXIT STATUS
.Bl -tag -width Ds
2014-09-29 13:22:59 +00:00
.It 0
.Ar expression
is neither an empty string nor 0
2014-09-29 13:22:59 +00:00
.It 1
.Ar expression
is an empty string or 0
2014-09-29 13:22:59 +00:00
.It 2
.Ar expression
is invalid
.It > 2
An error occured
2014-09-29 13:22:59 +00:00
.El
.Sh SEE ALSO
.Xr test 1
2014-09-29 13:22:59 +00:00
.Sh STANDARDS
The
.Nm
utility is compliant with the
.St -p1003.1-2008
specification.