Script Zsh vs. Bash. Qual é a diferença?

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 usar o 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.

Como mudar de Bash para Zsh

Se você estiver usando um sistema Linux e quiser mudar para Zsh, comece 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.

  Como fazer o download do aplicativo Google Pay para iPhone

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 de shell, defina o PS1 (Prompt Primário).

 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 muitas outras maneiras de personalizar o prompt Zsh, permitindo definir um indicador de administrador, incluir a data e 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. Use o comando declare -A 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.

  Como pausar emails temporariamente no Gmail

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 comando setopt. Por exemplo, para corresponder todos os arquivos .txt 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 comando shopt com a opção extglob. Por exemplo, para corresponder todos os arquivos .txt no diretório atual:

 shopt -s extglob
txt_files=(*.txt)

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

 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 comando interno eval ou a sintaxe ${!var} 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.

  Como enviar código no Skype com formatação adequada

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 a sintaxe $(command) 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 o Bash quanto o Zsh usam o sinalizador -x 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 sinalizador -x permite a depuração. Você pode usar uma abordagem semelhante no Zsh; basta substituir bash por 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: Bash e Zsh têm comunidades ativas, mas 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 aprendizado: se você é novo em scripts de shell, 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.