14.2.7 Macro Expressions
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.