Not knowing why, but the bash completion won't work if I call application in the absolute path.
For example, I have file1 & file2 under the current directory
[zhengw@localhost ~]$ rm -f file<tab><tab>
file1 file2
[zhengw@localhost ~]$ which rm
/bin/rm
[zhengw@localhost ~]$ /bin/rm -f file<tab><tab>
In the above example, bash auto completed the files for me in the first command, but returned nothing for the second command.
Also tried other commands, it turns out if I use the absolute path, the bash completion just won't work.