一个简单的 GNU m4 问题,但我找不到正确答案。我想打印一个开始/结束代码部分的降价标头:
```
echo Hello
```
如何创建包含 3 个反引号的 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 字节的引用字符串更加明确,尽管它需要更多的输入。