我在他们的网站上学习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个字母的选项。ie -pppp和-qqqq而不是-p和-q。
我已经写好了我的程序,实现-help给我带来了一个问题……
发布于 2012-03-27 06:46:19
对于传统的shell命令,-help等同于-h -e -l -p,因此如果您使用getopts解析"-help“,它会将其视为四个单独的参数。因此,您不能让多个字母的参数仅以单个连字符为前缀,除非您希望自己完成所有解析。按照惯例,不只是单个字符的选项(也称为“长选项”)前面有两个破折号,以使内容明确。
帮助文本的约定是同时支持-h和--help。
不幸的是,builtin不支持长选项,但是在所有常见的getopts发行版上都有一个单独的getopt实用程序,可以使用它来支持长选项。
发布于 2012-03-27 11:22:58
上面的是对的。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
donehttps://stackoverflow.com/questions/9880261
复制相似问题