I think some people aren't getting what the problem is here.  The script 
has been executed from the command line and we want the script to report 
the directory in which it is located.  There are four ways that the script 
could have been executed:

(1) absolute path
     example:  /usr/local/bin/script.bash

(2) relative path
     example:  ../../../local/bin/script.bash
     example:  ./local/bin/script.bash
     example:  local/bin/script.bash

(3) in search path ($PATH)
     example:  script.bash

(4) as above but using globbing
     example:  local/bin/scri*

In 1-3, the variable $0 will be the command as entered.  In "4" the 
filename is expanded and $0 becomes that filename, so you really only have 
to deal with the first three.

You have to remember that filenames or directory names can contain spaces. 
This is a really important little "gottcha" because you can do a whole lot 
of testing and think everything is fine because you never use spaces in 
filenames.  Some people like spaces (are they crazy? ;-), and your program 
will not seem so great to them!

Luckily, use of "which," with appropriate quoting around shell variables 
to deal with the spaces, seems to work for every case.

Mike