我在他们的网站上关注IBM的例子:
(列出#5)http://www.ibm.com/developerworks/library/l-bash-parameters/index.html
#!/bin/bash
echo "OPTIND starts at $OPTIND"
while getopts ":pq:" optname
do
case "$optname" in
"p")
echo "Option $optname is specified"
;;
"q")
echo "Option $optname has value $OPTARG"
;;
"?")
echo "Unknown option $OPTARG"
;;
":")
echo "No argument value for option $OPTARG"
;;
*)
# Should not occur
echo "Unknown error while processing options"
;;
esac
echo "OPTIND is now $OPTIND"
done
我想要的是有一个名字超过1个字母的选项。即-pppp和-qqqq而不是-p和-q。
我已经编写了我的程序并且实现-help给了我一个问题...
答案 0 :(得分:8)
对于传统的shell命令,-help
等同于-h -e -l -p
,因此如果您使用getopts
解析“-help”,它会将其视为四个单独的参数。因此,除非您想自己进行所有解析,否则不能使用前缀为单个连字符的多字母参数。按照惯例,不仅仅是单个字符(也就是“长选项”)的选项前面有两个破折号,而不是明确的。
帮助文字的惯例是同时支持-h
和--help
。
不幸的是,bash的getopts
内置版不支持长选项,但是在所有常见的Linux发行版上都有一个单独的getopt
实用程序可以替代支持长选项。
答案 1 :(得分:4)
Upfloor是对的。 getopt实用程序支持长选项,同时可以使用--option。也许你可以试试这个。
#!/bin/bash
args=`getopt -l help :pq: $*`
for i in $args; do
case $i in
-p) echo "-p"
;;
-q) shift;
optarg=$1;
echo "-q $optarg"
;;
--help)
echo "--help"
;;
esac
done