22921a859f
Fix "new sentence, new line" warnings throughout so that formatters can produce correct spacing between sentences. join.1 Remove unnecessary Ns macros. These are not necessary for delimeters, which get special treatment. xinstall.1 Fix date in manual. The contents were last modified on 2016-12-03, so use that instead of the invalid date. grep.1 Fix escape sequence for `\<` and `\>`. ed.1 Remove spurious `\\n` escape for the null-command.
106 lines
1.7 KiB
Groff
106 lines
1.7 KiB
Groff
.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.
|