Je trouve souvent la déclaration changement être vraiment utile dans des situations comme celle-ci. Dans une boucle while, vous pouvez tester les options attendues dans une instruction case, en désactivant l'argument 0 pendant chaque itération avec shift, jusqu'à ce que vous atteigniez la fin ou le premier paramètre positionnel.
Lorsque vous arrivez à l'argument --target dans la boucle, vous pouvez utiliser shift, pour la pop de la liste d'arguments, puis dans une boucle, ajoutez chaque argument à une liste (dans ce cas target_list de $) et shift, jusqu'à ce que vous arriviez à la fin de la liste des arguments, ou l'option suivante (quand '$ 1' commence par '-').
NOTIFY=0
AMOUNT=''
TARGET_LIST=''
while :; do
case "$1" in
-h|--help)
echo "$HELP"
exit 0
;;
--notify)
NOTIFY=1
shift
;;
--amount)
shift; AMOUNT="$1"; shift
;;
--target)
shift
while ! echo "$1" | egrep '^-' > /dev/null 2>&1 && [ ! -z "$1" ]; do
TARGET_LIST="$TARGET_LIST $1"
shift
done
;;
-*)
# Unexpected option
echo $USAGE
exit 2
;;
*)
break
;;
esac
done