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

m4 stops processing if new value contains hash (#)

如果值有散列,如何强制 m4 继续处理行?

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

我想要第二种情况的相同行为 - 可能吗? (所有三个匹配项都将被替换)。

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

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

解决办法是把注释字符改成changecom:

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

当然你可以选择更好的评论开始和结束顺序。

Ps。您可以使用不带参数的简单 changecom 关闭评论:echo changecom a a a。您可以从手册中阅读它:)