Zsh vs. Bash Scripting. Quina és la diferència?

Zsh vs. Bash Scripting. Quina és la diferència?
Lectors com tu ajuden a donar suport a MUO. Quan feu una compra mitjançant enllaços al nostre lloc, podem guanyar una comissió d'afiliats. Llegeix més.

Quan es tracta de shell script en sistemes operatius semblants a Unix, dominen dos shells: Bash (Bourne Again Shell) i Zsh (Z Shell). Si sou un programador o un administrador de sistemes, l'elecció entre aquests dos afecta significativament la vostra eficiència i productivitat.





MUO Vídeo del dia DESPLACEU PER CONTINUAR AMB EL CONTINGUT

Comprendre les diferències i similituds entre aquests dos intèrprets d'ordres us ajudarà a optimitzar el vostre flux de treball de línia d'ordres. Conèixer els matisos de cada closca us ajudarà a prendre decisions informades.





Què són Bash i Zsh?

Bash és popular tant en sistemes Linux com macOS. És una eina potent que podeu utilitzar per interactuar amb el sistema operatiu i executar ordres. Tu pots també utilitzeu Bash per a scripts de shell , que automatitza les tasques escrivint scripts que contenen més d'una ordre.





Zsh (shell Z) és una versió estesa de Bash que té moltes més funcions. És el shell predeterminat a macOS. També és cada cop més popular als sistemes Linux.

Com canviar de Bash a Zsh

Si utilitzeu un sistema Linux i voleu canviar a Zsh, comenceu per utilitzant el vostre gestor de paquets per instal·lar-lo . Per exemple, a Debian o Ubuntu, utilitzeu l'ordre següent:



 sudo apt install zsh

Després d'instal·lar-lo al vostre sistema, canvieu-hi executant l'ordre següent:

 chsh -s $(which zsh)

Si utilitzeu macOS, Zsh ja està instal·lat. Per canviar-hi, executeu l'ordre següent:





 chsh -s /bin/zsh

Per tornar a Bash, substituïu Zsh per Bash a les ordres anteriors.

per què el meu ordinador portàtil continua escalfant-se

Per comprovar quin shell esteu utilitzant, executeu l'ordre següent:





 echo $SHELL

Això us ajudarà a confirmar que esteu utilitzant l'intèrpret d'ordres que voleu.

Diferències entre Zsh i Bash

Hi ha diverses diferències entre Zsh i Bash. Tenir en compte aquestes diferències t'ajudarà a decidir quina carcassa s'adapta millor a tu.

1. Personalització ràpida

Zsh ofereix una manera més fàcil de personalitzar les vostres sol·licituds % seqüències d'escapament basades. Això permet indicacions dinàmiques amb color i informació. Per personalitzar l'indicador de l'intèrpret d'ordres, definiu el PS1 (Indicació principal).

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

El missatge personalitzat anterior mostra el nom d'usuari, el nom d'amfitrió i el directori actual en diferents colors:

  Personalització del missatge de Zsh al terminal

Hi ha molts altres maneres de personalitzar el missatge de Zsh , que us permet configurar un indicador d'administrador, incloure la data i l'hora i desar la nova sol·licitud.

Bash utilitza un enfocament lleugerament diferent quan es tracta de personalització ràpida. Utilitza codis d'escapada per especificar els canvis de color i format a la sol·licitud. Per aconseguir la mateixa personalització que Zsh anterior, podeu utilitzar la següent indicació personalitzada.

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

Utilitzant \[3[0m\] és crucial, ja que garanteix que els canvis de color no afectin el text que segueix la sol·licitud.

2. Suport per a matrius associatives

Zsh admet de forma nativa matrius associatives. Aquestes matrius proporcionen una manera còmoda d'associar dades que facilita l'organització i la recuperació de la informació. Ús declarar -A ordre per declarar explícitament una matriu associativa:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

A continuació, podeu assignar valors a la matriu associativa:

 my_assoc_array=(key1 value1 key2 value2) 

I, finalment, accedeix als valors mitjançant les seves claus:

 echo $my_assoc_array[key1] # Outputs: value1

Bash ha inclòs suport natiu per a matrius associatives des de la versió 4.0. Declara i assigna valors de la mateixa manera que ho faries a Zsh. Però quan es tracta d'accedir als valors de la matriu, heu d'embolicar la clau entre claudàtors:

 echo "${my_assoc_array[key1]}" 

La diferència principal és que el suport de Zsh per a matrius associatives és més ric en funcions i avançat que Bash. Zsh permet que les matrius associatives tinguin claus de diversos tipus de dades, no només cadenes. Bash només admet claus de cadena.

En versions anteriors de Bash, heu d'esbrinar una manera de solucions alternatives o disposar d'eines externes per utilitzar matrius associatives.

3. Patrons de globus estesos

Els patrons de globbing ampliats proporcionen una manera potent i flexible de seleccionar i manipular fitxers i directoris en funció de diversos criteris. Són útils quan treballeu amb estructures de fitxers complexes o quan necessiteu un control precís sobre les seleccions de fitxers.

En un script Zsh, podeu habilitar aquests patrons mitjançant l' setopt comandament. Per exemple, per coincidir amb tots .txt fitxers al directori actual:

 setopt extended_glob 
txt_files=(*.txt)

Per fer coincidir tots els fitxers excepte els amb extensió .log:

 setopt extended_glob 
non_log_files=^(*.log)

A Bash, heu d'habilitar-los mitjançant el botigues comanda amb el extglob opció. Per exemple, per coincidir amb tots .txt fitxers al directori actual:

instal·leu el disc dur antic com a segona unitat
 shopt -s extglob 
txt_files=(*.txt)

Per fer coincidir tots els fitxers excepte els amb .registre extensió:

transmissió de vídeo des de PC a TV
 shopt -s extglob 
non_log_files=!(*.log)

La diferència principal entre Zsh i Bash quan es tracta de patrons de globbing és l'ordre que s'utilitza per habilitar-los. Tanmateix, tingueu en compte que alguns operadors són diferents entre les dues shells.

4. Expansió de paràmetres avançats

Zsh admet l'expansió indirecta de paràmetres. Això us permet ampliar el valor d'una variable el nom de la qual s'emmagatzema en una altra variable. Per aconseguir-ho, heu de prefixar el nom de la variable amb un signe d'exclamació ! .

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

Bash, d'altra banda, no permet l'expansió indirecta de manera nativa. La solució per a això és utilitzar el eval comandament integrat o el ${!era} sintaxi per a referències de variables indirectes.

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

Similituds entre Bash i Zsh

Tot i que hi ha diferències entre Bash i Zsh, també comparteixen algunes similituds.

1. Sintaxi de la línia d'ordres

Bash i Zsh comparteixen una sintaxi de línia d'ordres similar. Això és genial perquè vol dir que la majoria de les ordres i scripts que escriu funcionaran en qualsevol intèrpret d'ordres, sense modificacions. Zsh està construït a sobre de Bash, de manera que inclou totes les mateixes ordres i funcions bàsiques.

Tanmateix, hi ha diferències molt petites en la sintaxi que haureu d'identificar i ajustar.

2. Coherència de substitució de comandaments

La substitució d'ordres és el procés d'incrustar la sortida d'una ordre en una altra. És consistent entre ambdues petxines.

 result=$(ls) 

Tant a Bash com a Zsh, podeu utilitzar el $(ordre) sintaxi per substituir la sortida d'una ordre per una variable. Això permet una fàcil portabilitat dels scripts entre les dues shells.

3. Opció de depuració d'scripts

Tant Bash com Zsh utilitzen -x marca per a la depuració d'scripts. Quan executeu un script amb aquest senyalador, mostra cada comanda abans d'executar-se. Això us ajuda a identificar problemes als vostres scripts.

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

echo "Debugging Bash script"

En aquest guió de Bash, el -x La bandera permet la depuració. Podeu utilitzar un enfocament similar a Zsh; només substituir xoc amb zsh .

Consideracions per triar entre Zsh i Bash

  • Compatibilitat i portabilitat : Bash és l'intèrpret d'ordres per defecte en molts sistemes basats en Unix. Això fa que sigui una opció més segura per a scripts multiplataforma. Si necessiteu que els vostres scripts s'executin en una àmplia gamma de sistemes sense modificacions, Bash és una millor opció.
  • Complexitat del guió i funcions avançades : Zsh ofereix funcions avançades com ara matrius associatives, patrons de globbing ampliats i expansió avançada de paràmetres. Això simplifica les tasques d'scripting complexes. Si els vostres scripts requereixen una manipulació avançada de cadenes o estructures de dades, Zsh és una millor opció.
  • Comunitat i ecosistema de connectors : Tant Bash com Zsh tenen comunitats actives, però Zsh té una comunitat més forta i un ampli ecosistema de connectors i temes. Si valoreu la personalització, la comunitat vibrant i el suport dels connectors de Zsh poden ser un avantatge important.
  • Facilitat d'aprenentatge : Si sou nou a l'escriptura de shell, Bash és un punt de partida més accessible. Té una àmplia documentació i recursos disponibles per a principiants. Això fa que sigui més fàcil aprendre els conceptes bàsics de shell script.

Automatització de tasques mitjançant scripts de Shell

Saber automatitzar tasques mitjançant scripts d'intèrpret d'ordres és de gran importància. Podeu automatitzar tasques repetitives i estalviar molt de temps.

També podeu utilitzar aquests scripts per gestionar els comptes d'usuari, supervisar els recursos del sistema, fer una còpia de seguretat de dades i realitzar un manteniment rutinari. Quan s'escriuen amb cura, també poden reduir el potencial d'error humà.