...continuation: ~/.java$ cd ../a ~/a$ rm -r .java ~/a$ cd symlink ~/a/symlink$ cd ../ [now completion does not work] ~/a/symlink$ cd ../.java/ ~/.java$
So, cd looks into the logical directory, and if the lookup fails, then it looks into the physical directory. The cd completion from a symlink, though, needs a file of a given name in both directories, and it does not matter if the one in the logical directory is even a directory.