如何正确检测M4中的定义/变量是否为空,而它可以包括逗号



如何在M4模板中检测到定义/变量是否为空,而它也可以包含逗号?它通过M4参数,因此可以包含任何值。

问题是,当我编写ifelse条件而不放置变量内部引号时,它可以正常工作,但是当var包含逗号时,它会破坏模板。如果我将其放入引号中,则将无法检测到空字符串。

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

未正确处理,预期:non-empty; "a, a, INJECTED"

我的环境

  • OS:Xubuntu 18.04 LTS 64bit
  • M4:1.4.18

我认为以下是您的愿望:

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

相关内容

  • 没有找到相关文章

最新更新