getopt
e getopts
suportam qualquer ordem para os argumentos fornecidos - Eles são fáceis de usar e parecem ser as soluções canônicas para a análise de argumentos.
Duas diferenças que são frequentemente mencionadas:
-
getopt
suporta opções longas como--help
. -
getopts
é um shell Bash embutido em vez de um programa independente.
Exemplo exemplo :
simplificado e abrangente# Process parameters
params="$(getopt -o e:hv \
-l exclude:,help,verbose \
--name "$0" -- "$@")"
if [ $? -ne 0 ]
then
usage
fi
eval set -- "$params"
unset params
while true
do
case $1 in
-e|--exclude)
excludes+=("${2-}")
shift 2
;;
-h|--help)
usage
exit
;;
-v|--verbose)
verbose='--verbose'
shift
;;
--)
shift
if [ -z "${1:-}" ]
then
error "Missing targets." "$help_info" $EX_USAGE
fi
if [ -z "${2:-}" ]
then
error "Missing directory." "$help_info" $EX_USAGE
fi
targets=(${@:1:$(($#-1))})
source_dir="${@:$#}"
break
;;
*)
usage
;;
esac
done