You can make this code a little smaller using the extended globbing features available in Bash. To enable these features you need to first set the extglob option via shopt. (Unfortunately, this is not possible under Bourne shell, so if strict Bourne compatibility is what you're aiming for then this won't cut it.) The ?() glob operator will match when it's contents (inside the parens) are found either zero or one time. Here's a very simple example:
Code:
#!/usr/bin/env bash
shopt -s extglob
case $1 in
-?(-)v?(e?(r?(s?(i?(o?(n)))))) ) echo "version" ;;
* ) echo "not a version" ;;
esac
Since the ?() glob operator can be nested, you can achieve the desired result, although somewhat at the cost of code readability.
As an aside, this seems to me like a fairly non-standard way of doing options. Usually you only provide two mechanisms for setting an option, short (like -v) and long (like --version). But in any case this is the best solution I can come up with to do what you want.