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

所以我有以下脚本sorting命令行选项我从这里得到它:

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 

除了工作不正常,我觉得有一个更好的方法来做到这一点。
任何人都可以指向正确的方向,或者至less告诉我我做错了什么?

使用shell内建的getopts或GNU命令getopt