本文转载自http://utxz.com/142.html
m4是一个通用的宏处理器,宏处理器(或预处理器)一般用作文本替换工具。最终用户经常会用它来处理要反复使用的文本模板,典型的是用于编程工具,还会用于文本编辑和文字处理工具。m4是POSIX标准中的一部分,所有版本的UNIX下都可用。虽然这种语言可以单独使用,但大多数人需要m4仅仅是因为GNU autoconf中的“configure”脚本依赖它。
举个简单的例子就能很好的理解
创建文件:test.m4 :
|
define
(
AUTHOR
,
Javen
)
dnl
define
(
EMAIL
,
javenly
@
gmail
.com
)
dnl
'Author'
:
AUTHOR
'Email'
:
EMAIL
|
执行命令:m4 test.m4
|
Author
:
Javen
Email
:
javenly
@
gmail
.com
|
上述例子就是把 AUTHOR和EMAIL替换成m4定义的宏,关于详细的m4的语法定义可以参考如下文档
https://www.gnu.org/software/m4/m4.html
http://mbreen.com/m4.html
======================================
=======================================
原文http://blog.donews.com/groper/archive/2009/01/25/1463518.aspx
- 定义宏:define(name, stuff)——参数:$1,$2,…
- 取消宏的定义:undefine(`name´)
- 重定义引号:changequote(…, …)
- 检查是否定义某宏:ifdef(`name´, `then´, `else’ )
- 参数+1:incr(…)
- 表达式求值:eval(…)
- 包含文件:include(filename)——不报错:sinclude(filename)
- 输出转向:divert(n)
- 取回被转向的文本:undivert(n)——省略n则取回所有
- 当前转向文本编号:divnum
- 系统命令:syscmd(…)
- 条件测试:ifelse(a, b, c, d, e, f, g)——如果字符串 a 匹配字符串 b,结果为 c。否则,如果 d 同于 e,结果为 f。否则结果为 g。如果省略了最后的参数,结果为空。
- 字符串长度:len(…)
- 子串:substr(s,i,n)——起始于零
- 子串位置:index(s1,s2)——s1中s2串的位置
- 字符替换:translit(s,f,t))——通过把在 f 中找到的任何字符都替换为 t 中对应的字符修改 s
- 删除跟随它的直到并包括下一个换行的所有字符:dnl
- 写出到标准错误文件:errprint(`…’)
- 转储定义的项的当前定义:dumpdef