User's manual. Section 1.

XP(1): evaluate expressions


USAGE

        usage: xp [-DFLYqu] [expr]
            -D: debug
            -F: report known functions and exit
            -L: debug lex
            -Y: debug yacc
            -q: do not print values as they are evaluated
            -u: use unix out
        

DESCRIPTION

Xp evaluates the expression given as an argument, or those in its standard input if none is given. When using standard input, each line is parsed and evaluated as a single expression. The expressions may involve file attributes. Thus, xp replaces the venerable UNIX test command.

The usual arithmetic and logic operators can be used, Values in operations are considered as unsigned integers, integers, floating point numbers, strings, or booleans, depending on the context.

The following functions are known to xp, all operate on floating point numbers:

        abs   asin  atanh cosh  floor log2  sqrt  trunc
        acos  asinh cbrt  exp   log   sin   tan   Γ
        acosh atan  cos   exp2  log10 sinh  tanh
        

A name that starts with "%" is considered a conversion for Printf and can be used as a function to print the argument with such conversion.

Any name that is not a function name and is not a conversion can be used as a function to ask for the value of a file attribute with such name. The names r, w, and x can be used as attribute names and evaluate to a boolean value indicating if the file has any of the read, write, or execute permissions set.

Text enclosed in double quotes is understood always as a name. Also, after calling a file attribute as a function, the next non-blank word is understood as a name, including characters like /, -, etc., which would become operators in other places. This is a helper to specify file paths in a convenient way.

A string in square brackets represents a time. This can be used with the relational operators to compare against attributes that indicate times. The string may use any format understood by the [cmd/opt(2)] package.

If the last computed yields a value of true the command exits with success, and if it is false with failure. This, along with flag -q, is useful to evaluate expressions as shell conditions without printing their value.

EXAMPLES

    See if the length of the file is greater than 3 Mbytes and print y if it is.
        ; xp -q size afile '>' 3m && echo y
        

    Print the mtime for a file

        ; xp mtime afile
        2015-05-08 11:35:28
        

    See if the file was changed since 2013-01-02 3pm

        ; xp mtime afile '>' '[2013-01-02 3pm]'
        false
        

    Print 4KiB as a 32bit binary number [

      ; xp '%064b (4 1024)' 00000000000000000001000000000000

    ]

SOURCE

  • [/zx/sys/src/clive/cmd/xp[


User's manual. Section 1.