Esses padrões não são regexps, são comumente referidos como padrões glob. E em nenhum caso o shell expandirá corretamente os padrões glob para nomes de pacotes para ser usado com o apt-get. Shells só expandirão padrões glob baseados em arquivos que estão presentes no seu sistema de arquivos local.
As outras camadas que você usou também não expandem esse padrão, mas sim do que relatar um erro eles passam o argumento como digitado para o apt-get que então é capaz de combinar o padrão em si e fazê-lo contra os nomes de pacotes disponíveis. Você pode obter esse comportamento do zsh usando:
unsetopt no_match
Mas seria melhor habituar-se a citar caracteres especiais como *
quando
você não quer que esses padrões sejam expandidos pelo shell. Se você aconteceu
ter um arquivo que corresponda a esse padrão em seu diretório atual ao executar
esse comando qualquer dessas conchas iria expandir o padrão para coincidir com esse arquivo
antes de executar o apt-get, é improvável que ele forneça os resultados que você
esperando.
Qualquer um dos itens a seguir funcionaria em qualquer um desses shells, mesmo se você tiver arquivos que correspondem ao padrão:
sudo apt-get install llvm-3.1\*
sudo apt-get install 'llvm-3.1*'
sudo apt-get install "llvm-3.1*"
Isso evitaria que o shell tentasse expandir o padrão incorretamente e para zsh, ele evitará a mensagem de erro se o padrão não puder ser expandido.