<p>Currently I'm doing some unit tests which are executed from bash. Unit tests are initialized, executed and cleaned up in a bash script. This script usualy contains an init(), execute() and cleanup() functions. But they are not mandatory. I'd like to test if they are or are not defined.</p>

<p>I did this previously by greping and seding the source, but it seemed wrong. Is there a more elegant way to do this?</p>

<p>Edit: The following sniplet works like a charm:</p>

<pre><code>fn_exists()
{
    LC_ALL=C type $1 | grep -q 'shell function'
}
</code></pre>

Like this:
```
[[ $(type -t foo) == function ]] && echo "Foo exists"
```
The built-in
```
type
```
command will tell you whether something is a function, built-in function, external command, or just not defined.
Additional examples:
```
```
$ LC_ALL=C type foo
bash: type: foo: not found

$ LC_ALL=C type ls
ls is aliased to `ls --color=auto'

$ which type

$ LC_ALL=C type type
type is a shell builtin

$ LC_ALL=C type -t rvm
function

$ if [ -n "$(LC_ALL=C type -t rvm)" ] && [ "$(LC_ALL=C type -t rvm)" = function ]; then echo rvm is a function; else echo rvm is NOT a function; fi
rvm is a function
```
```