首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >m4中的无限递归

m4中的无限递归
EN

Stack Overflow用户
提问于 2013-12-08 03:10:27
回答 1查看 94关注 0票数 1

此m4脚本用于生成shell脚本的部分参数解析代码。不幸的是,它不能产生正确的输出:

代码语言:javascript
复制
#!/bin/m4

define(`HANDLE_CASE', ``-'substr($1,0,1)`|--'$1`) option='$1`; skip=1 ;;'')
define(`HANDLE_CASES', `ifelse(`$#'
,`0',``
-v|--version) showVersion; exit $? ;;
-h|--help) dispUsage 2>&1; exit $? ;;
--) break ;;
*) dispUsage; exit 1'',
`HANDLE_CASE($1)
HANDLE_CASES(shift($@))')')
HANDLE_CASES(timeout,delay,file)

预期输出:

代码语言:javascript
复制
-t|--timeout) option=timeout; skip=1 ;;
-d|--delay) option=delay; skip=1 ;;
-f|--file) option=file; skip=1 ;;
-h|--help) dispUsage 2>&1 ; exit $? ;;
-v|--version) showVersion; exit $? ;;
--) break ;;
*) dispUsage; exit 1

实际输出:

代码语言:javascript
复制
#!/bin/m4



-t|--timeout) option=timeout; skip=1 ;;
-d|--delay) option=delay; skip=1 ;;
-f|--file) option=file; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;
-|--) option=; skip=1 ;;

或者,换句话说,无限递归(上面的程序被管道传输到head -n 20 )。

如何终止递归?

EN

回答 1

Stack Overflow用户

发布于 2019-09-16 01:46:07

缩进只是为了清楚起见。

代码语言:javascript
复制
#!/bin/m4

define(`HANDLE_CASE', `-substr($1,0,1)|--$1) option=$1; skip=1 ;;')

define(`HANDLE_CASES',
    `ifelse(eval(`$# > 1'), `1', `
        HANDLE_CASE($1)`'HANDLE_CASES(shift($@))', `
        -v|--version) showVersion; exit $? ;;
        -h|--help) dispUsage 2>&1; exit $? ;;
        --) break ;;
        *) dispUsage; exit 1')')

HANDLE_CASES(timeout,delay,file)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20445387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档