如果新值包含哈希值(#),m4将停止处理

时间:2017-01-06 12:21:36

标签: macros m4

如果值有哈希值,如何强制m4继续处理行?

$ echo a a a | m4 -D a=B+
B+ B+ B+
$ echo a a a | m4 -D a=B#
B# a a

我想要第二种情况的相同行为 - 这可能吗? (所有三次更​​换)。

据我所知,观察到的行为不一致,我在用户手册中找不到解释。

1 个答案:

答案 0 :(得分:4)

#字符是注释的第一个字符,换行符是最后一个字符。 m4解析第一个a并将其替换为B#。它没有扫描更多,因为它会发表评论。

解决方案是使用changecom更改注释字符:

$ echo "changecom(BC,EC)a a a" | m4 -D a=B#
B# B# B#

当然,您可以选择更好的评论开始和结束序列。

聚苯乙烯。您可以使用简单changecom不带参数关闭注释:echo changecom a a a。您可以从手册中阅读:)