如何在M4预处理器中转义哈希字符(#)?

时间:2019-02-14 19:16:00

标签: escaping m4

如何在M4中转义井号(#)?

我的M4宏是这样的:

define(`lnk',<a target="_blank" href="$1">$1</a>)dnl

我正在这样使用它:

lnk(http://www.example.com)

要产生这个:

<a target="_blank" href="http://www.example.com">http://www.example.com</a>

我的问题是当我尝试像这样使用它时:

lnk(http://www.example.com#anchor)

然后我得到这个错误:

ERROR: end of file in argument list

那是因为井号(#)。我怎样才能解决这个问题?我必须在M4中转义哈希字符吗?

我正在使用从gnuwin32项目下载的Windows M4(使用Win 10 x64)

1 个答案:

答案 0 :(得分:0)

由于不必要的扩展,您应该引用字符串。就您而言:

lnk(`http://www.example.com#anchor')

但是您可以禁用或重新定义注释字符。开头的默认值为#,结尾的默认值为换行符。此宏为changecom(请参见here)。

changecom()dnl
define(`lnk',<a target="_blank" href="$1">$1</a>)dnl
lnk(http://www.example.com#anchor)