Uma causa provável para a aparente diferença na saída de ls -l entre zsh e bash é o uso de Tab -completion com AUTO_REMOVE_SLASH ativado em zsh (que é o padrão).
AUTO_REMOVE_SLASH <D>
When the last character resulting from a completion is a slash and the next character typed is a word delimiter, a slash, or a character that ends a command (such as a semicolon or an ampersand), remove the slash.
Ao digitar ls -l symb Tab , ambos zsh e bash concluirão isso para ls -l symboliclink/ (observe o / no final). A diferença é que zsh (com habilitado AUTO_REMOVE_SLASH ) irá remover a barra, se você simplesmente pressionar Enter (ou seja, encerrar o comando) lá.
Assim, você executará efetivamente ls -l symboliclink/ em bash , o que informará ls -l a procurar por trás do link. Mas em zsh você executará ls -l symboliclink , informando ao ls -l que você deseja ver as informações sobre o link e não sobre o diretório de destino.
ls sem opção -l sempre mostrará o conteúdo do diretório de destino, independentemente de haver / no final ou não.
Para que o zsh não remova a barra no final, basta digitar explicitamente após TAB -completion. Geralmente isso não irá alterar visivelmente o texto completo, mas se você digitar um espaço ou confirmar o comando, o / permanecerá. "Geralmente" porque é possível definir um realce para caracteres de sufixo adicionados automaticamente, por exemplo, magenta e negrito:
zle_highlight[(r)suffix:*]="suffix:fg=magenta,bold"
( Observação: isso pode não funcionar ao usar o plug-in de realce de sintaxe do ZSH )
Outra solução é (obviamente) desabilitar AUTO_REMOVE_SLASH . Isso pode ser feito com
setopt noautoremoveslash