我尝试了以下代码
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)引用。
答案 0 :(得分:0)
Here是 标准。它写道:
宏名称应由字母,数字和下划线组成,其中 第一个字符不是数字。不属于这种形式的代币不得 被视为宏。
我认为使用defn
会更好(而不是indir
),因为POSIX标准不包含indir
(defn
是)和defn
必须在其他m4
- 实现(不仅是GNU)上工作。
如果您的变量以下划线(不是美元符号)开头,我认为在您的情况下会更好:_TITLE
。它是有效的宏名称,可能没有出现在您的文本中:)