M4预处理器中的字符串长度

时间:2016-06-22 20:34:04

标签: m4 text-manipulation

所以,通过这个简单的输入,

define(foo, len($1)) foo(abcdef)

我得到了,作为输出:

 2

如何才能打印5呢?我无法找出使len()实际接收 $1abcdef 的值的引用的任何组合,而不是文字字符串{{ 1}}。

编辑1:有问题的实际代码如下所示:

`$1'

1 个答案:

答案 0 :(得分:3)

len($1)的引用不足会导致在定义步骤中立即进行评估,因此foo定义为2.

即。这相当于:

define(foo, 2) foo(abcdef)

完整引用时,结果符合您的预期:

define(`foo', `len($1)') foo(`abcdef')
> 6