Macro Expansion Is Recursive
When text
contains other
macros, those other macros are also expanded. This
process is recursive and continues until all macros
have been expanded. For example, consider the
following:
DAxxx DByyy DC$A.$B DD$C.zzz
Here, the text
for the
macro D
is
$C.zzz
. When
the D
macro is
defined, it is recursively expanded like
this:
$D becomes → $C.zzz $C.zzz becomes → $A.$B.zzz $A.$B.zzz becomes → xxx.$B.zzz xxx.$B.zzz becomes → xxx.yyy.zzz
Notice that when sendmail recursively expands a macro, it does so one macro at a time, always expanding the leftmost macro first.
In rules, when sendmail expands a
macro, it also tokenizes it. For example, placing
the earlier $D
in
the following rule’s LHS:
R$+ @ $D $1
causes the LHS to contain seven tokens rather than three:
R$+ @ xxx . yyy . zzz $1
Note that the largest a recursive expansion can grow is defined at compile time with the MACBUFSIZE compile-time macro (MAX... on page 120), which defaults to 4,096 characters.
Get sendmail, 4th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.