#! /bin/bash
ARGV=($(getopt -l long-option1,long-option2:,foo-foo -o 'L:' -- "$@")) || exit 1
for((i=0;i<${#ARGV[@]};i++)) {
eval opt=${ARGV[$i]}
case $opt in
--long-option1)
echo "--long-option1";;
-L)
((i++));
eval opt=${ARGV[$i]};
echo "-L $opt";
;;
--long-option2)
((i++));
eval opt=${ARGV[$i]};
echo "--long-option2 $opt";
;;
--foo-foo)
echo "$opt";
;;
--)
break;;
esac
}
for((i++;i<${#ARGV[@]};i++)) {
eval opt=${ARGV[$i]}
echo " $opt"
}
1. 将getopt的结果保存到数组ARGV中,从而保留了原始的命令行输入参数。传统的做法是用set -- 覆盖命令行参数。
2. 在我的cygwin版本的getopt,使用-a选项会导致getopt产生internal error。在linux版本上则无此问题。
3. 如果仅仅接受long option,在调用getopt的时候也需要指定选项-o '',否则getopt分析的结果会产生错误。
4. 在不产生歧义的前提下,命令行输入的long option可以简写。(如上面的例子中,--foo-foo可以简写成--f。赞!!)
阅读(889) | 评论(0) | 转发(0) |