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.,
10 < 2 both evaluate to ‘1’ (true).
Comparisons are case sensitive, so that
a = A evaluates to
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