GNU m4:转义反引号(`)

时间:2015-04-08 18:34:55

标签: escaping backticks m4

一个简单的GNU m4问题,但我找不到正确的答案。我想打印开始/结束代码部分的降价标题:

```
echo Hello
```

如何创建包含3个反引号的GNU M4宏?

之类的东西
define(`md_code',````')
md_code
echo Hello
md_code

1 个答案:

答案 0 :(得分:6)

得到了Eric Blake在M4邮件列表上的答案: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字节的引号字符串更不明确   然后需要更多打字。