- 论坛徽章:
- 0
|
典型的getopt用法?
- #! /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。赞!!) |
|