GNU m4:转义反引号(`)

10

一个简单的 GNU m4 问题,但我找不到正确的答案。我想打印一个起始/结束代码段的 Markdown 标题:

```
echo Hello
```

我该如何创建一个包含三个反引号的GNU M4宏?就像这样:

define(`md_code',````')
md_code
echo Hello
md_code
1个回答

10

我在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个字节的引用字符串甚至更不明确,尽管需要更多的键入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接