Как я могу определить в шаблоне 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