Как я могу определить в шаблоне m4, является ли определение/переменная пустой, хотя она также может содержать запятые? Он передается через аргументы m4, поэтому может содержать любое значение.
Проблема в том, что когда я пишу условие ifelse
, не помещая переменную в кавычки, оно работает, но когда переменная содержит запятые, это нарушает шаблон. Если я помещу его в кавычки, пустая строка не будет обнаружена.
Пример 1:
Шаблон файла.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:
Шаблон файла.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
Неверная обработка, ожидаемая: non-empty; "a, a, INJECTED"
Моя среда
- ОС: Xubuntu 18.04 LTS 64-битная
- m4: 1.4.18