如何在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_')