繁体   English   中英

使用 function 和 output 级别编号

[英]Usage function with output level numbers

我正在使用以下代码。 我的意图是根据与-u关联的值打印一些使用信息。

例如,如果我有调用heading -u1heading -u2 ,我会得到使用案例条件(1)(2)显示的正确信息。

但是我在仅使用heading -u时遇到了问题。 在这种情况下,我想打印$# == 0时出现的标题用法。 我注意到在调用heading -u时, function heading_usage$1空,但$#1

heading_usage ()
{
 printf '%s\n' "heading_usage .$*. $#"
 if (( $# == 0 )); then
   printf '%s\n' "  heading [OPTIONS] HEADING"
 fi

 case $1 in
  (1)
    printf '%s\n' " Some Information"
    ;;
  (2)
    printf '%s\n' "Additional Information"
    ;;
 esac
}

heading ()
{ 
 while (( $# > 0 )); do
  case $1 in
   ("-u"|"--usage")
     usg="$2" ; shift ; shift
     heading_usage "$usg"
     return 0
     ;;
   ("-u="*|"--usage="*)
     usg="${1#*=}" ; shift 1
     heading_usage "$usg"
     return 0
     ;;
   ("-u"*)
     usg="$2" ; shift ; shift
     printf '%s\n' "usg: .$usg."
     heading_usage "$usg"
  esac
 done
}
 ("-u"*)
    usg="$2" ; shift ; shift

那不是$2 - 它是一个参数-u ,它在$1中,这是一个参数,所以不要shift;shift但只有一个shift

 "-u"*)
    usg="${1#-u}" ; shift

不要重新发明轮子 - 强烈考虑使用getopts (可移植选项,但只有短选项)或 GNU getopt (非可移植选项,特定于 Linux,但支持长选项和可选选项)。

在这种情况下,我想打印 $# == 0 时出现的标题用法

正如你所指出的,看起来"-u"可以解决这个问题。 所以检查是否存在下一个参数:

-u|--usage)
     if (($# > 1)); then
        usg="$2"
        heading_usage "$usg"
     else
        heading_usage
     fi
     return 0
     ;;;
 "-u"*)
    usg="${1#-u}"
    shift
    ...
    ;;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM