fmlexpr(1F)




NAME

     fmlexpr - evaluate arguments as an expression


SYNOPSIS

     fmlexpr arguments


DESCRIPTION

     The fmlexpr function evaluates its arguments as  an  expres-
     sion.  After  evaluation, the result is written on the stan-
     dard output. Terms of the expression must  be  separated  by
     blanks.   Characters  special  to FMLI must be escaped. Note
     that  30 is returned to indicate a zero value,  rather  than
     the  null string. Strings containing blanks or other special
     characters should be quoted. Integer-valued arguments may be
     preceded  by  a  unary  minus sign. Internally, integers are
     treated as 32-bit, 2s complement numbers.

     The operators and keywords are listed below. Characters that
     need  to  be escaped are preceded by \. The list is in order
     of increasing precedence, with  equal  precedence  operators
     grouped within {} symbols.


USAGE

  Expressions
     expr \| expr
           Returns the first expr if it is neither  NULL  nor  0,
           otherwise returns the second expr.

     expr \& expr
           Returns the first expr if neither expr is  NULL or  0,
           otherwise returns 0.

     expr { =, \>, \>=, \<, \<=, != } expr
           Returns the result of an integer  comparison  if  both
           arguments  are  integers, otherwise returns the result
           of a lexical comparison.

     expr { +, - } expr
           Addition or subtraction of integer-valued arguments.

     expr { *, /, % } expr
           Multiplication,  division,   or   remainder   of   the
           integer-valued arguments.

     expr : expr
           The matching operator :  (colon)  compares  the  first
           argument with the second argument which must be a reg-
           ular expression. Regular expression syntax is the same
           as  that  of  ed(1),  except  that  all  patterns  are
           "anchored" (that is, begin with ^) and,  therefore,  ^
           is  not  a  special  character, in that context.  Nor-
           mally, the matching operator  returns  the  number  of
           bytes matched (0 on failure). Alternatively, the (...)
           pattern symbols can be used to return a portion of the
           first argument.


EXAMPLES

     Example 1: Incrementing a variable

     Add 1 to the variable a:

     example% fmlexpr $a + 1 | set -l a

     Example 2: Setting a variable equal to a filename

     For $a equal to either /usr/abc/file or just file:

     example% fmlexpr  $a  :   .*/\(.*\)  \|  $a

     returns the last segment of a path  name  (that  is,  file).
     Watch  out  for / alone as an argument: fmlexpr will take it
     as the division operator (see NOTES below).

     Example 3: A better representation of Example 2

     example% fmlexpr  //$a  :  .*/\(.*\)

     The addition of the // characters eliminates  any  ambiguity
     about  the division operator (because it makes it impossible
     for the left-hand expression to be interpreted as the  divi-
     sion operator), and simplifies the whole expression.

     Example 4: Counting characters in a variable

     Return the number of characters in $VAR:

     example% fmlexpr $VAR : .*


EXIT STATUS

     As a side effect of expression evaluation,  fmlexpr  returns
     the following exit values:

     0     if the expression is neither  NULL  nor  0  (that  is,
           TRUE)

     1     if the expression is NULL or 0 (that is, FALSE)

     2     for invalid expressions (that is, FALSE).


ATTRIBUTES

     See attributes(5) for descriptions of the  following  attri-
     butes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Availability                | SUNWcsu                     |
    |_____________________________|_____________________________|


SEE ALSO

     ed(1), expr(1), set(1F), sh(1), attributes(5)


DIAGNOSTICS

     syntax error
           for operator/operand errors

     non-numeric argument
           if arithmetic is attempted on such a string

     In the case of syntax errors and non-numeric  arguments,  an
     error  message  will  be printed at the current cursor posi-
     tion. Use refresh to redraw the screen.


NOTES

     After argument processing by FMLI, fmlexpr cannot  tell  the
     difference  between an operator and an operand except by the
     value. If $a is an =, the command:

     example% fmlexpr $a = =

     looks like:

     example% fmlexpr = = =

     as the arguments are passed to fmlexpr (and they will all be
     taken  as  the = operator). The following works, and returns
     TRUE:

     example% fmlexpr X$a = X=


Man(1) output converted with man2html