If you're happy to copy the approach used by `find` and quote the two wildcard glob patterns you can use your script to expand the values appropriately. In this configuration the quoted patterns are then handled by the shell (and therefore by `getopts`) as only one argument each.
Here's an example, where I've taken your existing code pretty much unchanged and shrunk it for (my) convenience. Your code is laid out better, but the interesting parts are the processing of the `-a` and `-b` arguments:
```lang-bash
#!/bin/bash
#
# Multiple arguments: multitool -hp -a 'a*.txt' -b 'b*.txt'
#
########################################################################
#
while getopts ':hpg:a:b:' option
do
case "$option" in
a) a_list=($OPTARG) ;; # Expand the (quoted) argument to the a_list array
b) b_list=($OPTARG) ;; # Expand the (quoted) argument to the b_list array
h) echo "HELP!" >&2; exit 1 ;;
p) l_peaks="$OPTARG" ;;
g) l_bgraphs="$OPTARG" ;;
\?) echo "ERROR!" >&2; exit 1 ;;
esac
done
shift `expr "$OPTIND" - 1`
# Checking values
#
echo "l_peaks=$l_peaks, l_bgraphs=$l_bgraphs"
echo "a_list=(${a_list[@]})"
echo "b_list=(${b_list[@]})"
echo
for ((i=0; i<="${#a_list[@]}"; i++))
do
printf '%d\t%s\t%s\n' "$i" "${a_list[$i]}" "${b_list[$i]}"
done
```
Example
```lang-bash
ls
aapple abanana acherry bone bthree btwo
./multitool -p -a 'a*' -b 'b*'
l_peaks=, l_bgraphs=
a_list=(aapple abanana acherry)
b_list=(bone bthree btwo)
0 aapple bone
1 abanana bthree
2 acherry btwo
```