su invokes bash in non-login mode. Bash then reads
.bashrc to configure its environment.
su - invokes bash as a login shell. In this mode
/etc/profile is executed if it exists. Bash also searches for
~/.profile executing the first file it finds. Although not documented, it appears to execute
~/.bashrc when none of these exist.
If you get different behavior, it is likely that you are using different files to initialize bash depending on how it is invoked.
I tested which file was invoked by adding lines like
echo .bashrc to then end of the existing files. This will display which configurations get invoked.
There is more detail on this behavior in the INVOCATION section of the
bash man page.
Tab completion is available in
bash but not in
root normally has
sh as its shell as
bash may not be available. Users typically have
bash as their shell.
root before trying tab-completion. This should enable tab completion.