我试图用if替换if(使用GNU m4 1.4.14并且我收到ERROR: end of file in argument list
在尝试时:
define(`if', `if(')
define(`then', `){')
define(`fi', `}')
if foo then bar() fi
我已经尝试转义括号,但是在短暂的一段时间后,它会导致m4出现错误。通过手册扫描,我发现与此问题无关。
将宏的名称更改为“IF”或“if”之外的其他内容时,它会按预期工作,这使我相信它会反复评估自己。
如果是这样,我如何定义仅评估一次的宏?否则,我应该考虑解决这个问题?
编辑我通过处理两次找到了解决此问题的方法,一次将if转换为_IF,然后将_IF转换为if(。我认为有更好的方法可以做到这一点,所以这只是我眼中的临时解决方案。
答案 0 :(得分:3)
您需要阻止m4
尝试重新展开替换。通过双引号来实现:
define(`if', ``if('')
define(`then', `){')
define(`fi', `}')
if foo then bar() fi