【发布时间】:2014-05-23 21:52:46
【问题描述】:
我有以下代码:
while getopts ":vh" opt; do
case $opt in
(h)
helpMe
exit 0
;;
(v)
version1
exit 0
;;
\?)
echo -e "Invalid option: -$OPTARG\ntype -h for more help.\n" >&2
exit 1
;;
esac
done
此代码应仅获得标志“h”和“v”。 但是当我给出标志例如'hg'时,我仍然得到帮助输出。 另外,当我给出标志“va”时,我仍然得到版本输出。 我想说的是,我的脚本忽略了所需字母之后的所有字母。
为什么会这样? 有人可以请教吗?
谢谢。
【问题讨论】:
-
AFAIK opt 仅处理标志(单个字母)。所以
hg是帮助,g是未知的。所以恕我直言,您的程序根据 opt 正确运行。你的期望是不同的。当你给它hg时它应该怎么做?中止? -
no.get the help output
-
我只是相信你的语法是错误的。而不是
(h)试试h)。 -
@RedX,
bash实际上允许 both 形式,尽管在野外很少看到(x)- 请参阅 bash 手册页,特别是模式之前的位:case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac.