簡體   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