如何在m4中定义不区分大小写的宏名称



在定义宏名称时,是否有方法使其不区分大小写?

例如,
考虑输入流:Mov MOV moV mOv
我希望m4输出为:mov mov mov mov

实现这一点的简单方法是定义以下m4宏:

define(Mov,mov)
define(MOV,mov)
define(moV,mov)
define(mOv,mov)

当我们想对一个4或5个字母的单词做同样的事情时,这种方法就会变得乏味。有更好的方法吗?

如果只想进行字符串转换(希望m4输出为(,可以使用translit:

translit(string, mapfrom, mapto)
Transliterate the characters in the first argument from the
set given by the second argument to the set given by the
third.  You cannot use tr(1) style abbreviations.

您的案例:

translit(`MoV',`ABCDEFGHIJKLMNOPQRSTUVWXYZ',`abcdefghijklmnopqrstuvwxyz')

让我们创建一个名为to_lowercase的m4宏。其定义如下所示。

define(`to_lowercase',`translit($1,`ABCDEFGHIJKLMNOPQRSTUVWXYZ',`abcdefghijklmnopqrstuvwxyz')')

现在,我们可以使用to_lowercase(Mov)',to_lowercase(mOV('调用我们的宏。

相关内容

  • 没有找到相关文章

最新更新