The DOL m4 Macro
Ordinarily, the $
character is interpreted by m4
as a special character when found inside its
define
expressions:
define(`A', `$2')
↑
the $ makes $2 an m4 positional variable
There might be times, however, when you might want to
put a literal $
character into a definition—perhaps when designing
your own DOMAIN, FEATURE, or HACK files.
You place a literal $
into a definition with the DOL
m4 macro. For example:
define(`DOWN', `R DOL(*) < @ $1 > DOL(*) DOL(1) < @ $2 > DOL(2)')
Here, we define the m4 macro
named DOWN, which takes two arguments ($1
and $2
). Notice how the
$
character has
meaning to m4. This newly
created DOWN macro can then be used in one of your
.m4 files, perhaps like
this:
DOWN(badhost, outhost)
DOWN creates a rule by substituting the argument
(badhost
for the
$1
in its
definition, and outhost
)
for the corresponding $2
. The substitution looks like
this:
R DOL(*) becomes ← R $* < @ $1 > becomes ← < @ badhost > DOL(*) becomes ← $* DOL(1) becomes ← $1 < @ $2 > becomes ← < @ outhost > DOL(2) becomes ← $2
After substitution, the following new rule is the result:
R $* < @badhost
> $* $1 < @outhost
> $2
The DOL m4 macro allowed the
insertion of $
characters (such as $*
) and protects you from having the
literal use of $
characters being wrongly interpreted by
m4.
Needless to say, you should never redefine the DOL m4 macro.
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.