[英]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.