Em vez de tentar resolver a pergunta que você fez, essa resposta oferece uma solução que tenta resolver o problema subjacente. Para este exemplo, assumi que os argumentos a
e s
são booleanos (comutadores), mas o argumento l
recebe um parâmetro:
unset -v flagA flagS valueL
while getopts "al:s" OPT
do
case "$OPT" in
a) echo "Got a"; flagA=true ;;
s) echo "Got s"; flagS=true ;;
l) printf 'Got l with value "%s"\n' "$OPTARG"; valueL="$OPTARG" ;;
esac
done
shift "$((OPTIND - 1))"
printf '%s\n' "flagA=${flagA-unset}, flagS=${flagS-unset}, valueL=${valueL-unset}"
if [ "$#" -gt 0 ]; then
printf 'Other arguments:\n'
printf ' - "%s"\n' "$@"
fi
Mais informações na página bash
man.