9.使用M4sh编程

本系列文章均翻译自Autoconf官方文档:Autoconf Manual,github同步项目:question

M4sh,称作mash,目的是产生便携式可移植 Bourne shell 脚本。因为不同的shell的语法不兼容,故创造此种宏来解决。

其宏以AS_开头。在shell和环境变量中保留了变量命名空间as_,输出文件中是_AS[A-Z]

9.1 普通的shell结构

AS_IF (test1, [run-if-true1], …, [run-if-false])

如果没有一个测试是成功的,执行run-if-false

AS_IF([test "x$foo" = xyes], [HANDLE_FOO([yes])],
        [test "x$foo" != xno], [HANDLE_FOO([maybe])],
        [echo foo not specified])
AS_TR_CPP (expression)

expression转为C的宏定义

# This outputs "#define HAVE_CHAR_P 1".
        # Notice the m4 quoting around #, to prevent an m4 comment
        type="char *"
        echo "[#]define AS_TR_CPP([HAVE_$type]) 1"

9.2 间接变量名的支持

AS_LITERAL_IF (expression, [if-literal], [if-not], [if-simple-ref = ‘if-not’])
AS_LITERAL_WORD_IF (expression, [if-literal], [if-not], [if-simple-ref = ‘if-not’])

expression定义为shell文本,输出if-literal;若expression包含了shell引用或者调用(例如$var或cd),输出if-not

expression为文本的时候,AS_LITERAL_WORD_IF不允许expression含有空格,但是AS_LITERAL_IF可以。

AS_VAR_APPEND (var, text)

相当于var += text,即var=${var}text

AS_VAR_IF (var, [word], [if-equal], [if-not-equal])

输出shell的条件语句。var==word,执行if-equal;否则执行if-not-equal
word必须是单个shell单词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值