1

我正在尝试制作一个替换换行符的宏。

我的第一次尝试是:

    define(`m4_pascal_str',`
     patsubst(`$1',`^\(.*\)$',`\1++')
')

m4_pascal_str(`

11

22 33 44
')

define(zz,`

11

22 33 44
')
m4_pascal_str(`zz')

这在不使用中间宏时给出了正确的答案,否则只匹配最后一个换行符。请参阅下面的结果:

 ++

++
11++
++
22 33 44++

++

11

22 33 44
++

然后我发现了类似的问题: 在m4的patsubst中,如何用空格替换换行符?

所以,我刚刚做了:

define(`m4_pascal_str',`
     patsubst(`$1',`
',`++')
')

m4_pascal_str(`

11

22 33 44
')

define(zz,`

11

22 33 44
')
m4_pascal_str(`zz')

它给:

 ++++11++++22 33 44++

11

22 33 44

最后一种选择也有同样的问题。有什么建议么?

4

1 回答 1

2

对于最后一行,请尝试删除zz周围的引用。当我这样做时,两个 m4_pascal_str 调用得到了相同的结果:

     ++
++
11++
++
22 33 44++
++




     ++
++
11++
++
22 33 44++
++
于 2010-08-03T06:47:50.167 回答