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

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

m4
person Tom    schedule 19.05.2019    source источник


Ответы (1)


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

ifelse(defn(`_VAR_'),`',`empty',`non empty: _VAR_')
person uzsolt    schedule 22.05.2019