一个简单的 GNU m4 问题,但我找不到正确的答案。我想打印一个起始/结束代码段的 Markdown 标题:
```
echo Hello
```
我该如何创建一个包含三个反引号的GNU M4宏?就像这样:
define(`md_code',````')
md_code
echo Hello
md_code
我在M4邮件列表中得到了Eric Blake的答案:http://lists.gnu.org/archive/html/m4-discuss/2015-04/msg00004.html
changequote是你的好朋友。这将完成它:
define(`md_code', changequote([,
])[changequote([,])```changequote(`,')]changequote(`,'))
我必须两次更改引号:一次在宏定义周围,因为定义本身意图以不平衡的方式使用(反引号);再一次在宏扩展中,因为扩展将以不平衡的方式输出反引号;对于每个更改的引号,原始引号必须恢复。 这假定默认引号在整个m4运行中保持(反引号) '。
尽管在您的情况下,我建议提前使用changequote来更改为其他字符,并在全局范围内按照这些引用规则编写输入,而不是默认的(反引号)'引用规则。请记住,autoconf有意选择[ ]作为引号字符,因为它们在输出中很可能是平衡的,而(反引号)和'在shell脚本中并不成对出现。实际上,选择2或3个字节的引用字符串甚至更不明确,尽管需要更多的键入。