> (1) absolute path
> example: /usr/local/bin/script.bash
[[ ${0:0:1} == "/" ]]
> (2) relative path
> example: ../../../local/bin/script.bash
> example: ./local/bin/script.bash
> example: local/bin/script.bash
$PWD/`dirname`
> (3) in search path ($PATH)
> example: script.bash
which $0
> (4) as above but using globbing
> example: local/bin/scri*
$PWD/`dirname`
If you are correct that these are the only possibilities. Check for 1
and 3 first, then go with 3/4.
Brock