如何正确检测 m4 中的 define/variable 是否为空,同时它可以包含逗号?

How to properly detect whether a define/variable in m4 is empty while it can include commas?

如何在m4模板中检测define/variable是否为空,同时它也可以包含逗号?它通过 m4 个参数传递,因此它可以包含任何值。

问题是,当我写 ifelse 条件时没有将变量放在引号内,它可以工作,但是当 var 包含逗号时,它会破坏模板。如果我将它放在引号内,将不会检测到空字符串。

示例 #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"

我的环境

我想以下会是你的愿望:

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