[英]Usage function with output level numbers
我正在使用以下代碼。 我的意圖是根據與-u
關聯的值打印一些使用信息。
例如,如果我有調用heading -u1
和heading -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.