如何正确检测 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"
我的环境
- OS:Xubuntu 18.04 LTS 64 位
- m4: 1.4.18
我想以下会是你的愿望:
ifelse(defn(`_VAR_'),`',`empty',`non empty: _VAR_')
如何在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"
我的环境
- OS:Xubuntu 18.04 LTS 64 位
- m4: 1.4.18
我想以下会是你的愿望:
ifelse(defn(`_VAR_'),`',`empty',`non empty: _VAR_')