在bash shell中解析命令行选项的最佳方法是什么?

时间:2015-10-11 01:11:28

标签: linux bash shell unix

所以我有以下脚本来排序我从here获得的命令行选项:

optstring=h
unset options #deletes options
while(($#));
do
echo $item;
case $1 in
   -[!-]?*) # caso a opção seja do tipo -ab
      for ((i=1; i < ${#1}; i++));do # Loop sobre cada caracter
         c=${1:i:1}
         options+=("-$c")
      if [[ $optstring = *"$c:"* && ${1:i+1} ]];
      then
            options+=("${1:i+1}")
            break
      fi
    done;;
    #type --foo=bar
    --*[^=*]) options+=("${1%%=*}") ;
              echo "${options[@]}";;

    #THIS ONE IS NOT WORKING IDK WHY
    --?*=*) options+=("${1%%=*}" "${1#*=}") ;
            echo "${options[@]}";;
    # adds --endopts for --
    --) options+=(--endopts) 
        echo "${options[@]}";;
    *) options+=("$1")
       echo "${options[@]}";;
  esac
  shift
done

除了不能正常工作之外,我觉得有更好的方法可以做到这一点 任何人都可以指出我正确的方向或至少告诉我我做错了什么?

1 个答案:

答案 0 :(得分:3)

使用shell内置getopts或GNU命令getopt