Se o script começar corretamente com #!/bin/bash (você não pode ter outro comentário antes disso), você deve simplesmente executá-lo digitando /path/to/script.sh , sem que . no início. O . é uma instrução include, significa “executar o conteúdo deste arquivo como se tivesse sido digitado aqui na linha de comando” (isso é chamado de “sourcing” no jargão do shell unix).
A execução do bash e o fornecimento do script devem funcionar. Eu estou supondo que porque você tinha o bash iniciado automaticamente em algumas circunstâncias, mas você prefere o zsh, você configurou o bash para alternar automaticamente para o zsh - talvez com exec zsh no seu ~/.bashrc . Não faça isso: em vez disso, você deve alternar para zsh no arquivo executado ao efetuar login, ou seja, ~/.profile e deixar .bashrc sozinho. Para que zsh seja executado nos terminais, defina a variável de ambiente SHELL :
# in ~/.profile
export SHELL=/bin/zsh
if [ -t 1 ]; then exec $SHELL; fi
É uma pena que você não possa modificar o script, porque é um buggy. Os colchetes devem ser citados, mesmo no bash. Se houver um arquivo chamado 3+ no diretório atual, a chamada para egrep procurará uma ou mais ocorrências do dígito 3 em vez de uma seqüência de dígitos arbitrários. Se houver um arquivo chamado 3+ e um arquivo chamado 4+ , a chamada para egrep procurará 3 s no arquivo 4+ . Aqui, a diferença entre bash e zsh só entra em jogo quando nenhum arquivo corresponde ao padrão fornecido: bash silenciosamente executa o comando com o padrão não-substituído, enquanto zsh sinaliza um erro (por padrão).