From 588d5520d61d74d3bf9f41512fd0e4073e159d50 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Mon, 13 Oct 1997 21:59:27 +0000 Subject: expr reorg from KB --- doc/sh-utils.texi | 175 +++++++++++++++++++++++++++++------------------------- 1 file changed, 95 insertions(+), 80 deletions(-) (limited to 'doc') diff --git a/doc/sh-utils.texi b/doc/sh-utils.texi index 488cded5b..d34b08bbe 100644 --- a/doc/sh-utils.texi +++ b/doc/sh-utils.texi @@ -718,87 +718,13 @@ Exit status: @end display @menu -* Relations for expr:: | & < <= = == != >= > -* Numeric expressions:: + - * / % * String expressions:: match substr index length quote +* Numeric expressions:: + - * / % +* Relations for expr:: | & < <= = == != >= > * Examples of expr:: Examples. @end menu -@node Relations for expr -@subsection Relations for @code{expr} - -@cindex connectives, logical -@cindex logical connectives -@cindex relations, numeric or string - -The usual logical connectives and relations, in order of precedence. - -@table @samp - -@item | -@kindex | -@cindex logical or operator -@cindex or operator -Yields its first argument if it is neither null nor 0, otherwise its -second argument. - -@item & -@kindex & -@cindex logical and operator -@cindex and operator -Yields its first argument if neither argument is null or 0, otherwise -0. - -@item < <= = == != >= > -@kindex < -@kindex <= -@kindex = -@kindex == -@kindex > -@kindex >= -@cindex comparison operators -Compare the arguments and return 1 if the relation is true, 0 otherwise. -@code{==} is a synonym for @code{=}. @code{expr} first tries to coerce -both arguments to numbers and do a numeric comparison; if either -coercion fails, it does a lexicographic comparison. - -@end table - - -@node Numeric expressions -@subsection Numeric expressions - -@cindex numeric expressions -@cindex expressions, numeric - -Numeric operators, in order of increasing precedence. The connectives -(previous section) have higher precedence, the string operators -(following section) have lower. - -@table @samp - -@item + - -@kindex + -@kindex - -@cindex addition -@cindex subtraction -Addition and subtraction. Both arguments are coerced to numbers; -an error occurs if this cannot be done. - -@item * / % -@kindex * -@kindex / -@kindex % -@cindex multiplication -@cindex division -@cindex remainder -Multiplication, division, remainder. Both arguments are coerced to -numbers; an error occurs if this cannot be done. - -@end table - - @node String expressions @subsection String expressions @@ -814,7 +740,7 @@ String operators. These have lowest precedence. @cindex regular expression matching @cindex matching patterns Perform pattern matching. The arguments are coerced to strings and the -second is considered to be a (basic, a la @code{grep}) regular +second is considered to be a (basic, a la GNU @code{grep}) regular expression, with a @code{^} implicitly prepended. The first argument is then matched against this regular expression. @@ -825,12 +751,20 @@ subexpression; otherwise, it returns the number of characters matched. If the match fails, the @code{:} operator returns the null string if @samp{\(} and @samp{\)} are used in @var{regex}, otherwise 0. +@kindex \( @r{regexp operator} Only the first @samp{\( @dots{} \)} pair is relevant to the return value; additional pairs are meaningful only for grouping the regular expression operators. +@kindex \+ @r{regexp operator} +@kindex \? @r{regexp operator} +@kindex \| @r{regexp operator} +In the regular expression, @code{\+}, @code{\?}, and @code{\|} are +operators which respectively match one or more, zero or one, or separate +alternatives. SunOS and other @code{expr}'s treat these as regular +characters. (POSIX allows either behavior.) @xref{Top, , Regular Expression Library, regex, Regex}, for details of -regular expression syntax. +regular expression syntax. Some examples are in @ref{Examples of expr}. @item match @var{string} @var{regex} @findex match @@ -869,8 +803,84 @@ To make @code{expr} interpret keywords as strings, you must use the @code{quote} operator. +@node Numeric expressions +@subsection Numeric expressions + +@cindex numeric expressions +@cindex expressions, numeric + +@code{expr} supports the usual numeric operators, in order of increasing +precedence. The string operators (previous section) have lower precedence, +the connectives (next section) have higher. + +@table @samp + +@item + - +@kindex + +@kindex - +@cindex addition +@cindex subtraction +Addition and subtraction. Both arguments are coerced to numbers; +an error occurs if this cannot be done. + +@item * / % +@kindex * +@kindex / +@kindex % +@cindex multiplication +@cindex division +@cindex remainder +Multiplication, division, remainder. Both arguments are coerced to +numbers; an error occurs if this cannot be done. + +@end table + + +@node Relations for expr +@subsection Relations for @code{expr} + +@cindex connectives, logical +@cindex logical connectives +@cindex relations, numeric or string + +@code{expr} supports the usual logical connectives and relations. These +are higher precedence than either the string or numeric operators +(previous sections). Here is the list, lowest-precedence operator first. + +@table @samp + +@item | +@kindex | +@cindex logical or operator +@cindex or operator +Returns its first argument if that is neither null nor 0, otherwise its +second argument. + +@item & +@kindex & +@cindex logical and operator +@cindex and operator +Return its first argument if neither argument is null or 0, otherwise +0. + +@item < <= = == != >= > +@kindex < +@kindex <= +@kindex = +@kindex == +@kindex > +@kindex >= +@cindex comparison operators +Compare the arguments and return 1 if the relation is true, 0 otherwise. +@code{==} is a synonym for @code{=}. @code{expr} first tries to coerce +both arguments to numbers and do a numeric comparison; if either +coercion fails, it does a lexicographic comparison. + +@end table + + @node Examples of expr -@subsection Examples of @code{expr} +@subsection Examples of using @code{expr} @cindex examples of @code{expr} Here are a few examples, including quoting for shell metacharacters. @@ -886,6 +896,12 @@ To print the non-directory part of the file name stored in expr $fname : '.*/\(^.*\)' '^|' $fname @end example +An example showing that @code{\+} is an operator: +@example +expr aaa : 'a\+' +@result{} 3 +@end example + @example expr abc : 'a\(.\)c' @result{} b @@ -895,7 +911,6 @@ expr index index a @error{} expr: syntax error expr index quote index a @result{} 0 - @end example -- cgit v1.2.3-70-g09d2