Macro expressions are used in conditional expansion and loops, which are described in the following sections. A macro expression may use the following operators, listed in descending order of operator precedence:
()
Parentheses override the default operator precedence.
!EQ !NE !GT !LT !GE !LE = ~= <> > < >= <=
Relational operators compare their operands and yield a Boolean result, either ‘0’ for false or ‘1’ for true.
These operators always compare their operands as strings. This can be
surprising when the strings are numbers because, e.g., 1 <
1.0
and 10 < 2
both evaluate to ‘1’ (true).
Comparisons are case sensitive, so that a = A
evaluates to
‘0’ (false).
!NOT ~
!AND &
!OR |
Logical operators interpret their operands as Boolean values, where quoted or unquoted ‘0’ is false and anything else is true, and yield a Boolean result, either ‘0’ for false or ‘1’ for true.
Macro expressions do not include any arithmetic operators.
An operand in an expression may be a single token (including a macro
argument name) or a macro function invocation. Either way, the
expression evaluator unquotes the operand, so that 1 = '1'
is
true.