Как правильно определить, является ли определение / переменная в m4 пустым, хотя она может содержать запятые? - PullRequest
0 голосов
/ 19 мая 2019

Как я могу определить в шаблоне m4, является ли define / variable пустым, хотя он также может содержать запятые?Он передается через аргументы m4, поэтому может содержать любое значение.

Проблема в том, что когда я пишу условие ifelse без помещения переменной в кавычки, это работает, но когда переменная содержит запятые, она разбиваетшаблон.Если поместить его в кавычки, пустая строка не будет обнаружена.

Пример # 1 :

Файл template.m4:

ifelse(`_VAR_', `', `empty; "_VAR_"', `non-empty; "_VAR_"')

Результаты:

$ m4 -D _VAR_=text template.m4
non-empty; "text"
$ m4 -D _VAR_="a, a, INJECTED" template.m4
non-empty; "a, a, INJECTED"

Все в порядке.

$ m4 -D _VAR_= template.m4
non-empty; ""
$ m4 -D _VAR_="" template.m4
non-empty; ""

Ожидаемая проблема: empty; "" (в обоих случаях).

Пример # 2:

Файл template.m4:

ifelse(_VAR_, `', `empty; "_VAR_"', `non-empty; "_VAR_"')

Результаты:

$ m4 -D _VAR_=test template.m4
non-empty; "test"
$ m4 -D _VAR_= template.m4
empty; ""
$ m4 -D _VAR_="" template.m4
empty; ""

Все в порядке.

$ m4 -D _VAR_="a, a, INJECTED" template.m4
INJECTED

Wasn 't обрабатывается правильно, ожидается: non-empty; "a, a, INJECTED"

Мое окружение

  • ОС: Xubuntu 18.04 LTS 64bit
  • m4: 1.4.18

1 Ответ

1 голос
/ 22 мая 2019

Я думаю, что ваше желание будет следующим:

ifelse(defn(`_VAR_'),`',`empty',`non empty: _VAR_')
...