Given the inconsistent options available, I tend to roll my own; e.g.
SWITCH=false VAL=default while [ $#"$#" -gt 0 ] ; do case "${1}" in (-s|--switch) SWITCH=true ;; (-v|--value) VAL="${2}" ; shift ;; (-v?*) VAL="${1#-v}" ;; (--value=?*) VAL="${1#--value=}" ;; esac shift done