Entrambe le shell offrono potenti linguaggi di scripting, ma non sono totalmente compatibili.

Quando si tratta di scripting di shell su sistemi operativi simili a Unix, dominano due shell: Bash (Bourne Again Shell) e Zsh (Z Shell). Se sei un programmatore o un amministratore di sistema, la scelta tra questi due ha un impatto significativo sulla tua efficienza e produttività.

Comprendere le differenze e le somiglianze tra queste due shell ti aiuterà a ottimizzare il flusso di lavoro della riga di comando. Conoscere le sfumature di ogni guscio ti aiuterà a prendere decisioni informate.

Cosa sono Bash e Zsh?

Bash è popolare sia sui sistemi Linux che su macOS. È uno strumento potente che puoi utilizzare per interagire con il sistema operativo ed eseguire comandi. Puoi anche usa Bash per lo scripting della shell, che automatizza le attività scrivendo script contenenti più di un comando.

Zsh (Z shell) è una versione estesa di Bash che ha molte più funzionalità. È la shell predefinita su macOS. Sta diventando sempre più popolare anche sui sistemi Linux.

instagram viewer

Come passare da Bash a Zsh

Se utilizzi un sistema Linux e desideri passare a Zsh, inizia da utilizzando il gestore pacchetti per installarlo. Ad esempio, su Debian o Ubuntu, utilizza il seguente comando:

sudo apt install zsh

Dopo averlo installato sul tuo sistema, passa ad esso eseguendo il seguente comando:

chsh -s $(which zsh)

Se utilizzi macOS, Zsh è già installato. Per passare ad esso eseguire il seguente comando:

chsh -s /bin/zsh

Per tornare a Bash, sostituisci Zsh con Bash nei comandi precedenti.

Per verificare quale shell stai utilizzando, esegui il seguente comando:

echo $SHELL

Questo ti aiuterà a confermare che stai utilizzando la shell che intendevi.

Differenze tra Zsh e Bash

Esistono molte differenze tra Zsh e Bash. Considerare queste differenze ti aiuterà a decidere quale shell si adatta meglio a te.

1. Personalizzazione rapida

Zsh offre un modo più semplice per personalizzare i tuoi suggerimenti utilizzando %sequenze di fuga basate su Ciò consente prompt dinamici con colori e informazioni. Per personalizzare il prompt della shell, definisci il file PS1 (Prompt primario).

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

Il prompt personalizzato sopra mostra il nome utente, il nome host e la directory corrente in diversi colori:

Ci sono molti altri modi per personalizzare il prompt Zsh, consentendoti di impostare un indicatore di amministrazione, includere la data e l'ora e salvare il nuovo prompt.

Bash utilizza un approccio leggermente diverso quando si tratta di personalizzazione rapida. Utilizza codici di escape per specificare le modifiche al colore e alla formattazione nel prompt. Per ottenere la stessa personalizzazione di Zsh sopra, puoi utilizzare il seguente prompt personalizzato.

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

Utilizzando \[\033[0m\] è fondamentale in quanto garantisce che i cambiamenti di colore non influenzino il testo che segue il prompt.

2. Supporto per array associativi

Zsh supporta nativamente gli array associativi. Questi array forniscono un modo conveniente per associare i dati che semplifica l'organizzazione e il recupero delle informazioni. Utilizzo dichiarare-UN comando per dichiarare esplicitamente un array associativo:

# Declare an associative array in Zsh 
declare -A my_assoc_array

È quindi possibile assegnare valori all'array associativo:

my_assoc_array=(key1 value1 key2 value2) 

E, infine, accedi ai valori utilizzando le relative chiavi:

echo $my_assoc_array[key1] # Outputs: value1

Bash ha incluso il supporto nativo per gli array associativi dalla versione 4.0. Dichiari e assegni valori nello stesso modo in cui faresti in Zsh. Ma quando si tratta di accedere ai valori dell'array, è necessario racchiudere la chiave tra parentesi graffe:

echo "${my_assoc_array[key1]}" 

La differenza principale è che il supporto di Zsh per gli array associativi è più ricco di funzionalità e avanzato rispetto a Bash. Zsh consente agli array associativi di avere chiavi di vari tipi di dati, non solo stringhe. Bash supporta solo chiavi stringa.

Nelle versioni precedenti di Bash, era necessario trovare soluzioni alternative o disporre di strumenti esterni per utilizzare gli array associativi.

3. Modelli di globbing estesi

I modelli di globbing estesi forniscono un modo potente e flessibile per selezionare e manipolare file e directory in base a vari criteri. Sono utili quando lavori con strutture di file complesse o quando hai bisogno di un controllo preciso sulle selezioni dei file.

In uno script Zsh, puoi abilitare questi modelli utilizzando il file setopt comando. Ad esempio, per abbinare tutti .TXT file nella directory corrente:

setopt extended_glob
txt_files=(*.txt)

Per abbinare tutti i file tranne quelli con estensione .log:

setopt extended_glob
non_log_files=^(*.log)

In Bash, devi abilitarli usando il file fare acquisti comandare con il extglob opzione. Ad esempio, per abbinare tutti .TXT file nella directory corrente:

shopt -s extglob
txt_files=(*.txt)

Per abbinare tutti i file tranne quelli con .tronco d'albero estensione:

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

La differenza principale tra Zsh e Bash quando si tratta di pattern globbing è il comando utilizzato per abilitarli. Tuttavia, nota che alcuni operatori sono diversi tra le due shell.

4. Espansione avanzata dei parametri

Zsh supporta l'espansione indiretta dei parametri. Ciò consente di espandere il valore di una variabile il cui nome è memorizzato in un'altra variabile. Per raggiungere questo obiettivo è necessario anteporre al nome della variabile un punto esclamativo !.

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

Bash d'altra parte non consente l'espansione indiretta in modo nativo. La soluzione alternativa a questo problema è utilizzare il file val comando integrato o il ${!var} sintassi per i riferimenti a variabili indirette.

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

Somiglianze tra Bash e Zsh

Sebbene esistano differenze tra Bash e Zsh, condividono anche alcune somiglianze.

1. Sintassi della riga di comando

Bash e Zsh condividono una sintassi della riga di comando simile. Questo è fantastico perché significa che la maggior parte dei comandi e degli script che scrivi funzioneranno in entrambe le shell, senza modifiche. Zsh è basato su Bash, quindi include tutti gli stessi comandi e funzionalità di base.

Esistono, tuttavia, differenze molto minori nella sintassi che dovrai identificare e modificare.

2. Coerenza della sostituzione dei comandi

La sostituzione dei comandi è il processo di incorporamento dell'output di un comando in un altro. È coerente tra entrambi i gusci.

result=$(ls) 

Sia in Bash che in Zsh, puoi usare il file $(comando) sintassi per sostituire l'output di un comando in una variabile. Ciò consente una facile portabilità degli script tra le due shell.

3. Opzione di debug degli script

Sia Bash che Zsh usano -X flag per il debug degli script. Quando esegui uno script con questo flag, viene visualizzato ogni comando prima dell'esecuzione. Questo ti aiuta a identificare i problemi nei tuoi script.

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

echo "Debugging Bash script"

In questo script Bash, il -X flag abilita il debug. Puoi utilizzare un approccio simile in Zsh; basta sostituire bash con zsh.

Considerazioni sulla scelta tra Zsh e Bash

  • Compatibilità e portabilità: Bash è la shell predefinita su molti sistemi basati su Unix. Ciò lo rende una scelta più sicura per lo scripting multipiattaforma. Se hai bisogno che i tuoi script vengano eseguiti su un'ampia gamma di sistemi senza modifiche, Bash è un'opzione migliore.
  • Complessità degli script e funzionalità avanzate: Zsh fornisce funzionalità avanzate come array associativi, modelli di globbing estesi ed espansione avanzata dei parametri. Ciò semplifica le attività di scripting complesse. Se i tuoi script richiedono una manipolazione avanzata di stringhe o strutture dati, Zsh è la scelta migliore.
  • Comunità ed ecosistema di plugin: Sia Bash che Zsh hanno comunità attive, ma Zsh ha una comunità più forte e un vasto ecosistema di plugin e temi. Se apprezzi la personalizzazione, la vivace community di Zsh e il supporto dei plug-in possono rappresentare un vantaggio significativo.
  • Facilità di apprendimento: Se sei nuovo allo scripting di shell, Bash è un punto di partenza più accessibile. Ha un'ampia documentazione e risorse disponibili per i principianti. Ciò rende più semplice apprendere le basi dello scripting di shell.

Automatizzazione delle attività utilizzando gli script di shell

Sapere come automatizzare le attività utilizzando gli script di shell è di grande importanza. Puoi automatizzare le attività ripetitive e risparmiare molto tempo.

È inoltre possibile utilizzare questi script per gestire gli account utente, monitorare le risorse di sistema, eseguire il backup dei dati ed eseguire la manutenzione ordinaria. Se scritti con cura, possono anche ridurre il rischio di errore umano.