【发布时间】:2014-05-04 10:55:43
【问题描述】:
我正在编写一个 bash 脚本,它可以采用三个选项:c、p 和 m; c 不能有参数,但 p 和 m 必须有参数。在我的脚本中,我有这些代码行:
while getopts ":cp:m:" opt
do
case $opt in
c ) capitals=1
;;
m ) length=$OPTARG
;;
p ) number=$OPTARG
;;
\? ) echo "ERROR" 1>&2
exit 1
;;
esac
done
shift `expr $OPTIND - 1`
现在,当我在命令行中编写时
myScript.sh -c -p 15 -m 12
一切都很完美。但是当我写的时候
myScript.sh -cp15m12
出错了。 Bash 将选项'p' 的参数解释为"15m12",而它应该只是"15"。
我该如何解决这个问题?
【问题讨论】:
-
但是你为什么要从命令行剥离间隔?
-
p选项绝对无法判断字符串的m12部分是与p选项一起使用还是单独的选项。除非您编写自己的选项解析器来分隔数字和字母等的参数,否则对于具有这些选项的任何命令都是如此。 -
使用
shift $(($OPTIND - 1))可能比使用expr更好。
标签: bash arguments options variadic-functions