在定义宏名称时,是否有方法使其不区分大小写?
例如,
考虑输入流: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('调用我们的宏。