Ambos os shells oferecem linguagens de script poderosas, mas não são totalmente compatíveis.

Quando se trata de scripts de shell em sistemas operacionais do tipo Unix, dois shells dominam: Bash (Bourne Again Shell) e Zsh (Z Shell). Se você é um programador ou administrador de sistema, a escolha entre os dois impacta significativamente sua eficiência e produtividade.

Compreender as diferenças e semelhanças entre esses dois shells ajudará você a otimizar seu fluxo de trabalho de linha de comando. Conhecer as nuances de cada shell o ajudará a tomar decisões informadas.

O que são Bash e Zsh?

Bash é popular em sistemas Linux e macOS. É uma ferramenta poderosa que você pode usar para interagir com o sistema operacional e executar comandos. Você também pode use Bash para scripts de shell, que automatiza tarefas escrevendo scripts contendo mais de um comando.

Zsh (Z shell) é uma versão estendida do Bash que possui muitos mais recursos. É o shell padrão no macOS. Também está se tornando cada vez mais popular em sistemas Linux.

instagram viewer

Como mudar de Bash para Zsh

Se você estiver usando um sistema Linux e gostaria de mudar para Zsh, comece por usando seu gerenciador de pacotes para instalá-lo. Por exemplo, no Debian ou Ubuntu, use o seguinte comando:

sudo apt install zsh

Depois de instalá-lo em seu sistema, mude para ele executando o seguinte comando:

chsh -s $(which zsh)

Se você estiver usando macOS, o Zsh já está instalado. Para mudar para ele, execute o seguinte comando:

chsh -s /bin/zsh

Para voltar ao Bash, substitua Zsh por Bash nos comandos acima.

Para verificar qual shell você está usando, execute o seguinte comando:

echo $SHELL

Isso o ajudará a confirmar que está usando o shell pretendido.

Diferenças entre Zsh e Bash

Existem várias diferenças entre Zsh e Bash. A consideração dessas diferenças ajudará você a decidir qual shell é mais adequado para você.

1. Personalização imediata

Zsh oferece uma maneira mais fácil de personalizar seus prompts usando %sequências de escape baseadas em -. Isso permite prompts dinâmicos com cores e informações. Para personalizar seu prompt do shell, defina o PS1 (Prompt principal).

PS1="%F{green}%n@%m %F{blue}%~ %f$ "

O prompt personalizado acima exibe o nome de usuário, nome do host e diretório atual em cores diferentes:

Existem muitos outras maneiras de personalizar o prompt Zsh, permitindo definir um indicador de administrador, incluir a data e a hora e salvar o novo prompt.

Bash usa uma abordagem um pouco diferente quando se trata de personalização de prompts. Ele usa códigos de escape para especificar alterações de cor e formatação no prompt. Para obter a mesma personalização do Zsh acima, você pode usar o seguinte prompt personalizado.

PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "

Usando \[\033[0m\] é crucial porque garante que as alterações de cor não afetem o texto que segue o prompt.

2. Suporte para matrizes associativas

Zsh oferece suporte nativo a matrizes associativas. Essas matrizes fornecem uma maneira conveniente de associar dados, o que facilita a organização e a recuperação de informações. Usar declarar-A comando para declarar explicitamente uma matriz associativa:

# Declare an associative array in Zsh 
declare -A my_assoc_array

Você pode então atribuir valores à matriz associativa:

my_assoc_array=(key1 value1 key2 value2) 

E, por fim, acesse os valores através de suas chaves:

echo $my_assoc_array[key1] # Outputs: value1

Bash incluiu suporte nativo para arrays associativos desde a versão 4.0. Você declara e atribui valores da mesma forma que faria no Zsh. Mas quando se trata de acessar valores de array, você precisa colocar a chave entre chaves:

echo "${my_assoc_array[key1]}" 

A principal diferença é que o suporte do Zsh para matrizes associativas é mais rico em recursos e avançado do que o Bash. Zsh permite que arrays associativos tenham chaves de vários tipos de dados, não apenas strings. Bash suporta apenas chaves de string.

Nas versões anteriores do Bash, você precisa descobrir uma maneira de soluções alternativas ou ter ferramentas externas para usar matrizes associativas.

3. Padrões de Globbing Estendidos

Os padrões de globbing estendidos fornecem uma maneira poderosa e flexível de selecionar e manipular arquivos e diretórios com base em vários critérios. Eles são úteis quando você trabalha com estruturas de arquivos complexas ou quando precisa de controle preciso sobre as seleções de arquivos.

Em um script Zsh, você pode ativar esses padrões usando o setopt comando. Por exemplo, para combinar todos .TXT arquivos no diretório atual:

setopt extended_glob
txt_files=(*.txt)

Para corresponder todos os arquivos, exceto aqueles com extensão .log:

setopt extended_glob
non_log_files=^(*.log)

No Bash, você precisa habilitá-los usando o comprar comando com o extglob opção. Por exemplo, para combinar todos .TXT arquivos no diretório atual:

shopt -s extglob
txt_files=(*.txt)

Para corresponder todos os arquivos, exceto aqueles com .registro extensão:

shopt -s extglob
non_log_files=!(*.log)

A principal diferença entre Zsh e Bash quando se trata de padrões globais é o comando usado para habilitá-los. Entretanto, observe que alguns operadores são diferentes entre os dois shells.

4. Expansão de parâmetros avançados

Zsh suporta a expansão indireta de parâmetros. Isso permite expandir o valor de uma variável cujo nome está armazenado em outra variável. Para conseguir isso, você precisa prefixar o nome da variável com um ponto de exclamação !.

name="foo"
result="${!name}"
echo "$result"

O Bash, por outro lado, não permite expansão indireta nativamente. A solução alternativa para isso é usar o avaliação comando interno ou o ${!var} sintaxe para referências indiretas de variáveis.

name="world"
var="name"
echo ${!var} # This will output: world

Semelhanças entre Bash e Zsh

Embora existam diferenças entre Bash e Zsh, eles também compartilham algumas semelhanças.

1. Sintaxe da linha de comando

Bash e Zsh compartilham uma sintaxe de linha de comando semelhante. Isso é ótimo porque significa que a maioria dos comandos e scripts que você escreve funcionarão em qualquer shell, sem modificação. O Zsh é construído sobre o Bash, portanto inclui todos os mesmos comandos e recursos básicos.

Existem, no entanto, pequenas diferenças na sintaxe que você precisará identificar e ajustar.

2. Consistência de substituição de comando

A substituição de comando é o processo de incorporar a saída de um comando em outro. É consistente entre os dois shells.

result=$(ls) 

Tanto no Bash quanto no Zsh, você pode usar o $(comando) sintaxe para substituir a saída de um comando em uma variável. Isso permite fácil portabilidade de scripts entre os dois shells.

3. Opção de depuração de script

Tanto Bash quanto Zsh usam -x sinalizador para depuração de script. Quando você executa um script com esse sinalizador, ele exibe cada comando antes de ser executado. Isso ajuda a identificar problemas em seus scripts.

# Debugging a script in both Bash and Zsh
#!/bin/bash -x

echo "Debugging Bash script"

Neste script Bash, o -x sinalizador permite a depuração. Você pode usar uma abordagem semelhante no Zsh; apenas substitua festa com zsh.

Considerações para escolher entre Zsh e Bash

  • Compatibilidade e Portabilidade: Bash é o shell padrão em muitos sistemas baseados em Unix. Isso o torna uma escolha mais segura para scripts de plataforma cruzada. Se você precisa que seus scripts sejam executados em uma ampla variedade de sistemas sem modificação, o Bash é a melhor opção.
  • Complexidade de script e recursos avançados: Zsh fornece recursos avançados como matrizes associativas, padrões globbing estendidos e expansão avançada de parâmetros. Isso simplifica tarefas complexas de script. Se seus scripts exigem manipulação avançada de strings ou estruturas de dados, Zsh é a melhor escolha.
  • Comunidade e ecossistema de plug-ins: Tanto o Bash quanto o Zsh têm comunidades ativas, mas o Zsh tem uma comunidade mais forte e um extenso ecossistema de plug-ins e temas. Se você valoriza a personalização, a comunidade vibrante do Zsh e o suporte a plug-ins podem ser uma vantagem significativa.
  • Facilidade de aprendizagem: se você é novo em scripts de shell, o Bash é um ponto de partida mais acessível. Possui extensa documentação e recursos disponíveis para iniciantes. Isso torna mais fácil aprender os fundamentos do shell script.

Automatizando tarefas usando shell scripts

Saber como automatizar tarefas usando shell scripts é de grande importância. Você pode automatizar tarefas repetitivas e economizar muito tempo.

Você também pode usar esses scripts para gerenciar contas de usuários, monitorar recursos do sistema, fazer backup de dados e realizar manutenção de rotina. Quando cuidadosamente escritos, também podem reduzir o potencial de erro humano.