Как избежать $ в имени определения макроса m4? - PullRequest
0 голосов
/ 01 мая 2018

Я попробовал следующий код

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

но текст остается неизменным, когда я вызываю его с помощью m4.

Кажется, это проблема $. Должен ли я избежать этого?

EDIT:

Я обнаружил, что

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

работает, но есть ли лучший способ сделать это?

Кроме того, такое имя макроса указано как нестандартное , где я могу найти список с таким именем?

Руководство по GNU M4 1.4.18, раздел 5.1 Определение макроса

Как расширение GNU, первый аргумент для определения не должен быть простым словом. Это может быть любая текстовая строка, даже пустая строка. Макрос с нестандартным именем не может быть вызван обычным способом, так как имя не распознается. На него могут ссылаться только встроенные команды indir (см. Indir) и defn (см. Defn).

1 Ответ

0 голосов
/ 01 мая 2018

Здесь - это стандарт. Пишет:

Имена макросов должны состоять из букв, цифр и символов подчеркивания, где первый символ не цифра. Жетоны не этой формы не должны трактоваться как макросы.

Я думаю, что использование defn было бы лучше (вместо indir), потому что стандарт POSIX не содержит indir (defn yes), а defn должен работать на других m4 -определяющих ( не только GNU).

Я думаю, было бы лучше в вашем случае, если бы ваши переменные начинались с подчеркивания (а не знака доллара): _TITLE. Это допустимое имя макроса и может не отображаться в вашем тексте:)

...