如何在m4宏定义的名称中转义$?

时间:2018-05-01 16:11:57

标签: m4

我尝试了以下代码

define(`$TITLE', `my title')
This is my $TITLE.

但是当我用m4调用它时,文本保持不变。

似乎是$问题。我应该逃脱吗?

编辑:

我找到了

define(`$TITLE', `my title')
This is my indir(`$TITLE')

工作,但还有更好的方法吗?

此外,此类宏名称为referred非标准,我在哪里可以找到此类名称的列表?

  

GNU M4 1.4.18手册,5.1节定义宏

     

作为GNU扩展,定义的第一个参数不必是一个简单的单词。它可以是任何文本字符串,甚至是空字符串。无法以正常方式调用具有非标准名称的宏,因为无法识别该名称。它只能由builtins indir(参见Indir)和defn(参见Defn)引用。

1 个答案:

答案 0 :(得分:0)

Here 标准。它写道:

  

宏名称应由字母,数字和下划线组成,其中   第一个字符不是数字。不属于这种形式的代币不得   被视为宏。

我认为使用defn会更好(而不是indir),因为POSIX标准不包含indirdefn是)和defn必须在其他m4 - 实现(不仅是GNU)上工作。

如果您的变量以下划线(不是美元符号)开头,我认为在您的情况下会更好:_TITLE。它是有效的宏名称,可能没有出现在您的文本中:)