Я пробовал следующий код
define(`$TITLE', `my title')
This is my $TITLE.
но текст остается неизменным, когда я вызываю его с помощью m4
.
Похоже, это проблема с $
. Должен ли я сбежать от этого?
Обновлено:
я нашел это
define(`$TITLE', `my title')
This is my indir(`$TITLE')
работают, но есть способ лучше?
Также такое имя макроса сослался как нестандартный, где я могу найти список с таким именем?
GNU M4 1.4.18 manual, section 5.1 Defining a macro
As a GNU extension, the first argument to define does not have to be a simple word. It can be any text string, even the empty string. A macro with a non-standard name cannot be invoked in the normal way, as the name is not recognized. It can only be referenced by the builtins indir (see Indir) and defn (see Defn).
Здесь - это стандарт в. Он пишет:
Macro names shall consist of letters, digits, and underscores, where the first character is not a digit. Tokens not of this form shall not be treated as macros.
Я думаю, что использование defn
было бы лучше (вместо indir
), потому что стандарт POSIX не содержит indir
(defn
да), а defn
должен работать с другой реализацией m4
(не только GNU).
Я думаю, в вашем случае было бы лучше, если бы ваши переменные начинались с подчеркивания (а не со знака доллара): _TITLE
. Это правильное имя макроса и, возможно, не отображается в вашем тексте :)
Спасибо за ваш быстрый ответ. Я добавлю к макросам префикс
_
.