Next: , Previous: Looping constructs, Up: Programming in M4sugar


8.3.3 Evaluation Macros

The following macros give some control over the order of the evaluation by adding or removing levels of quotes. They are meant for hard-core M4 programmers.

— Macro: m4_dquote (arg1, ...)

Return the arguments as a quoted list of quoted arguments.

— Macro: m4_quote (arg1, ...)

Return the arguments as a single entity, i.e., wrap them into a pair of quotes.

The following example aims at emphasizing the difference between (i), not using these macros, (ii), using m4_quote, and (iii), using m4_dquote.

     $ cat example.m4
     # Overquote, so that quotes are visible.
     m4_define([show], [$[]1 = [$1], $[]@ = [$@]])
     m4_define([mkargs], [1, 2, 3])
     m4_define([arg1], [[$1]])
     m4_divert(0)dnl
     show(a, b)
     show(m4_quote(a, b))
     show(m4_dquote(a, b))
     arg1(mkargs)
     arg1([mkargs])
     arg1(m4_defn([mkargs]))
     arg1(m4_quote(mkargs))
     arg1(m4_dquote(mkargs))
     $ autom4te -l m4sugar example.m4
     $1 = a, $@ = [a],[b]
     $1 = a,b, $@ = [a,b]
     $1 = [a],[b], $@ = [[a],[b]]
     1
     mkargs
     1, 2, 3
     1,2,3
     [1],[2],[3]