Just read your rant. One of the reasons you might want to use shell aliases instead of functions are that they are designed for interactive use, and can easily be side-stepped by prepending a "\" to a command.
Observe:
$ alias "foo=foo2" $ foo foo2: command not found. $ \foo foo: command not found. $ unalias foo $ foo(){foo2;} $ foo foo2: command not found. $ \foo foo2: command not found.
They are also processed internally by bash at a different point in execution.
Observe:
$ alias "foo=foo2"
$ foo
foo2: command not found.
$ \foo
foo: command not found.
$ unalias foo
$ foo(){foo2;}
$ foo
foo2: command not found.
$ \foo
foo2: command not found.
They are also processed internally by bash at a different point in execution.