这个m4脚本用于生成shell脚本的部分参数解析代码。不幸的是,它没有产生正确的输出:
#!/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)
预期输出:
-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
实际输出:
#!/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 ;;
或者换句话说,无限递归(上面的程序用管道传输到-n 20)。
如何终止递归?
答案 0 :(得分:0)
缩进只是为了清楚...
#!/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)