我尝试了以下代码
define(`$TITLE', `my title')
This is my $TITLE.
但是当我用m4
调用它时,文本保持不变.
这似乎$
问题。我应该逃脱它吗?
编辑:
我发现
define(`$TITLE', `my title')
This is my indir(`$TITLE')
工作,但有更好的方法吗?
此外,此类宏名称称为非标准,在哪里可以找到此类名称的列表?
GNU M4 1.4.18 手册,第 5.1 节 定义宏
作为GNU扩展,要定义的第一个参数不必是一个简单的词。它可以是任何文本字符串,甚至是空字符串。无法以正常方式调用具有非标准名称的宏,因为无法识别该名称。它只能由内置的 indir(参见 Indir(和 defn(参见 Defn(引用。
这是标准。它写道:
宏名称应由字母、数字和下划线组成,其中 第一个字符不是数字。非此形式的令牌不得 被视为宏。
我认为使用defn
会更好(而不是indir
(,因为POSIX标准不包含indir
(defn
是的(,defn
必须在其他m4
实现(不仅是GNU(上工作。
我认为如果您的变量以下划线(不是美元符号(开头,在您的情况下会更好:_TITLE
.它是有效的宏名称,可能不会出现在您的文本:)