Zsh vs. Bash Scripting. Hvad er forskellen?

Zsh vs. Bash Scripting. Hvad er forskellen?
Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

Når det kommer til shell-scripting på Unix-lignende operativsystemer, dominerer to skaller: Bash (Bourne Again Shell) og Zsh (Z Shell). Hvis du er programmør eller systemadministrator, har valget mellem disse to væsentlig indflydelse på din effektivitet og produktivitet.





MUO Video af dagen RUL FOR AT FORTSÆTTE MED INDHOLD

At forstå forskellene og lighederne mellem disse to skaller vil hjælpe dig med at optimere dit kommandolinje-workflow. At vide om nuancerne i hver skal vil hjælpe dig med at træffe informerede beslutninger.





Hvad er Bash og Zsh?

Bash er populær på både Linux- og macOS-systemer. Det er et kraftfuldt værktøj, som du kan bruge til at interagere med operativsystemet og køre kommandoer. Du kan også brug Bash til shell-scripting , som automatiserer opgaver ved at skrive scripts, der indeholder mere end én kommando.





Zsh (Z shell) er en udvidet version af Bash, der har mange flere funktioner. Det er standardskallen på macOS. Det bliver også mere og mere populært på Linux-systemer.

Sådan skifter du fra Bash til Zsh

Hvis du bruger et Linux-system og gerne vil skifte til Zsh, så start med bruge din pakkehåndtering til at installere den . Brug for eksempel følgende kommando på Debian eller Ubuntu:



 sudo apt install zsh

Når du har installeret det på dit system, skal du skifte til det ved at køre følgende kommando:

 chsh -s $(which zsh)

Hvis du bruger macOS, er Zsh allerede installeret. For at skifte til det skal du køre følgende kommando:





 chsh -s /bin/zsh

For at skifte tilbage til Bash skal du erstatte Zsh med Bash i ovenstående kommandoer.

For at kontrollere, hvilken shell du bruger, skal du køre følgende kommando:





 echo $SHELL

Dette vil hjælpe dig med at bekræfte, at du bruger den skal, du havde til hensigt.

Forskelle mellem Zsh og Bash

Der er flere forskelle mellem Zsh og Bash. At overveje disse forskelle vil hjælpe dig med at beslutte, hvilken skal der passer bedst til dig.

hvordan man fremskynder bærbar til spil

1. Spørg tilpasning

Zsh tilbyder en nemmere måde at tilpasse dine prompter vha % -baserede escape-sekvenser. Dette giver mulighed for dynamiske prompter med farve og information. For at tilpasse din shell-prompt skal du definere PS1 (Primær prompt).

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

Ovenstående brugerdefinerede prompt viser brugernavnet, værtsnavnet og det aktuelle bibliotek i forskellige farver:

  Zsh prompt tilpasning på terminalen

Der er mange andre måder at tilpasse Zsh-prompten på , så du kan indstille en admin-indikator, inkludere dato og klokkeslæt og gemme den nye prompt.

Bash bruger en lidt anden tilgang, når det kommer til hurtig tilpasning. Den bruger escape-koder til at angive farve- og formateringsændringer i prompten. For at opnå den samme tilpasning som Zsh ovenfor, kan du bruge følgende brugerdefinerede prompt.

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

Ved brug af \[3[0m\] er afgørende, da det sikrer, at farveændringerne ikke påvirker tekst, der følger prompten.

2. Støtte til Associative Arrays

Zsh understøtter native associative arrays. Disse arrays giver en bekvem måde at tilknytte data, hvilket gør det nemt at organisere og hente information. Brug erklære -EN kommando til eksplicit at erklære et associativt array:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

Du kan derefter tildele værdier til det associative array:

 my_assoc_array=(key1 value1 key2 value2) 

Og endelig få adgang til værdierne ved hjælp af deres nøgler:

 echo $my_assoc_array[key1] # Outputs: value1

Bash har inkluderet native support til associative arrays siden version 4.0. Du erklærer og tildeler værdier på samme måde, som du ville gøre i Zsh. Men når det kommer til at få adgang til matrixværdier, skal du pakke nøglen ind i krøllede parenteser:

 echo "${my_assoc_array[key1]}" 

Den største forskel er, at Zsh's understøttelse af associative arrays er mere funktionsrig og avanceret end Bash. Zsh tillader associative arrays at have nøgler af forskellige datatyper, ikke kun strenge. Bash understøtter kun string keys.

I tidligere versioner af Bash skal du finde ud af en måde at løse problemet på eller have eksterne værktøjer til at bruge associative arrays.

3. Udvidede globbing mønstre

Udvidede globbing-mønstre giver en kraftfuld og fleksibel måde at vælge og manipulere filer og mapper på baseret på forskellige kriterier. De er nyttige, når du arbejder med komplekse filstrukturer, eller når du har brug for præcis kontrol over filvalg.

hvordan man installerer nintendont wii u

I et Zsh-script kan du aktivere disse mønstre ved hjælp af setopt kommando. For eksempel for at matche alle .txt filer i den aktuelle mappe:

 setopt extended_glob 
txt_files=(*.txt)

Sådan matcher du alle filer undtagen dem med filtypenavnet .log:

 setopt extended_glob 
non_log_files=^(*.log)

I Bash skal du aktivere dem ved hjælp af butikker kommando med extglob mulighed. For eksempel for at matche alle .txt filer i den aktuelle mappe:

 shopt -s extglob 
txt_files=(*.txt)

For at matche alle filer undtagen dem med .log udvidelse:

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

Den største forskel mellem Zsh og Bash, når det kommer til globbing-mønstre, er den kommando, der bruges til at aktivere dem. Bemærk dog, at nogle operatører er forskellige mellem de to skaller.

4. Avanceret parameterudvidelse

Zsh understøtter den indirekte udvidelse af parametre. Dette giver dig mulighed for at udvide værdien af ​​en variabel, hvis navn er gemt i en anden variabel. For at opnå dette skal du sætte et udråbstegn foran variabelnavnet ! .

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

Bash på den anden side tillader ikke indirekte ekspansion indbygget. Løsningen for dette er at bruge eval indbygget kommando eller ${!was} syntaks for indirekte variable referencer.

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

Ligheder mellem Bash og Zsh

Selvom der er forskelle mellem Bash og Zsh, deler de også nogle ligheder.

pop op -annoncer på android startskærm

1. Kommandolinjesyntaks

Bash og Zsh deler en lignende kommandolinjesyntaks. Dette er fantastisk, fordi det betyder, at de fleste kommandoer og scripts, du skriver, vil fungere i begge skaller uden ændringer. Zsh er bygget oven på Bash, så det indeholder alle de samme grundlæggende kommandoer og funktioner.

Der er dog meget små forskelle i syntaks, som du skal identificere og justere.

2. Kommandoerstatningskonsistens

Kommandosubstitution er processen med at indlejre output fra en kommando i en anden. Det er konsekvent mellem begge skaller.

 result=$(ls) 

I både Bash og Zsh kan du bruge $(kommando) syntaks for at erstatte outputtet af en kommando med en variabel. Dette giver mulighed for nem portabilitet af scripts mellem de to skaller.

3. Script Debugging Option

Både Bash og Zsh bruger -x flag for script-fejlretning. Når du kører et script med dette flag, viser det hver kommando, før det kører. Dette hjælper dig med at identificere problemer i dine scripts.

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

echo "Debugging Bash script"

I dette Bash-manuskript er -x flag muliggør fejlfinding. Du kan bruge en lignende tilgang i Zsh; bare udskift bash med zsh .

Overvejelser for at vælge mellem Zsh og Bash

  • Kompatibilitet og bærbarhed : Bash er standardskallen på mange Unix-baserede systemer. Dette gør det til et mere sikkert valg til cross-platform scripting. Hvis du har brug for dine scripts til at køre på en bred vifte af systemer uden ændringer, er Bash en bedre mulighed.
  • Scriptkompleksitet og avancerede funktioner : Zsh giver avancerede funktioner som associative arrays, udvidede globbing-mønstre og avanceret parameterudvidelse. Dette forenkler komplekse scriptopgaver. Hvis dine scripts kræver avanceret strengmanipulation eller datastrukturer, er Zsh et bedre valg.
  • Fællesskab og plugin-økosystem : Både Bash og Zsh har aktive fællesskaber, men Zsh har et stærkere fællesskab og et omfattende økosystem af plugins og temaer. Hvis du værdsætter tilpasning, kan Zsh's livlige fællesskab og plugin-support være en væsentlig fordel.
  • Nem at lære : Hvis du er ny til shell-scripting, er Bash et mere tilgængeligt udgangspunkt. Den har omfattende dokumentation og ressourcer til rådighed for begyndere. Dette gør det nemmere at lære det grundlæggende i shell-scripting.

Automatisering af opgaver ved hjælp af Shell-scripts

Det er af stor betydning at vide, hvordan man automatiserer opgaver ved hjælp af shell-scripts. Du kan automatisere gentagne opgaver og spare masser af tid.

Du kan også bruge disse scripts til at administrere brugerkonti, overvåge systemressourcer, sikkerhedskopiere data og udføre rutinemæssig vedligeholdelse. Når de er omhyggeligt skrevet, kan de også reducere risikoen for menneskelige fejl.