Skriptovanie Zsh vs. Bash. Aký je rozdiel?

Skriptovanie Zsh vs. Bash. Aký je rozdiel?
Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

Pokiaľ ide o skriptovanie shellu na operačných systémoch podobných Unixu, dominujú dva shelly: Bash (Bourne Again Shell) a Zsh (Z Shell). Ak ste programátor alebo správca systému, výber medzi týmito dvoma výrazne ovplyvňuje vašu efektivitu a produktivitu.





MUO Video dňa POKRAČUJTE V OBSAHU POKRAČOVANÍM

Pochopenie rozdielov a podobností medzi týmito dvoma shellmi vám pomôže optimalizovať pracovný tok príkazového riadka. Vedieť o nuansách každej škrupiny vám pomôže robiť informované rozhodnutia.





Čo sú Bash a Zsh?

Bash je populárny na systémoch Linux aj MacOS. Je to výkonný nástroj, ktorý môžete použiť na interakciu s operačným systémom a spúšťanie príkazov. Môžete tiež použite Bash na skriptovanie shellu , ktorý automatizuje úlohy písaním skriptov obsahujúcich viac ako jeden príkaz.





Zsh (Z shell) je rozšírená verzia Bash, ktorá má oveľa viac funkcií. Je to predvolený shell v systéme MacOS. Stáva sa čoraz populárnejším aj na systémoch Linux.

ako vymazať históriu vyhľadávania v aplikácii Google

Ako prejsť z Bash na Zsh

Ak používate systém Linux a chceli by ste prejsť na Zsh, začnite tým na inštaláciu pomocou správcu balíkov . Napríklad na Debiane alebo Ubuntu použite nasledujúci príkaz:



 sudo apt install zsh

Po nainštalovaní do systému sa naň prepnite spustením nasledujúceho príkazu:

 chsh -s $(which zsh)

Ak používate macOS, Zsh je už nainštalovaný. Ak ho chcete prepnúť, spustite nasledujúci príkaz:





 chsh -s /bin/zsh

Ak chcete prepnúť späť na Bash, nahraďte Zsh vo vyššie uvedených príkazoch Bash.

Ak chcete skontrolovať, ktorý shell používate, spustite nasledujúci príkaz:





 echo $SHELL

To vám pomôže potvrdiť, že používate shell, ktorý ste zamýšľali.

Rozdiely medzi Zsh a Bash

Medzi Zsh a Bash je niekoľko rozdielov. Zohľadnenie týchto rozdielov vám pomôže rozhodnúť sa, ktorá škrupina vám najlepšie vyhovuje.

1. Výzva na prispôsobenie

Zsh ponúka jednoduchší spôsob prispôsobenia vašich výziev pomocou % -založené únikové sekvencie. To umožňuje dynamické výzvy s farbou a informáciami. Ak chcete prispôsobiť výzvu shellu, definujte PS1 (Hlavná výzva).

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

Vyššie uvedená vlastná výzva zobrazuje používateľské meno, názov hostiteľa a aktuálny adresár v rôznych farbách:

  Zsh rýchle prispôsobenie na termináli

Je ich veľa iné spôsoby prispôsobenia výzvy Zsh , ktorá vám umožní nastaviť indikátor správcu, zahrnúť dátum a čas a uložiť novú výzvu.

Bash používa trochu iný prístup, pokiaľ ide o rýchle prispôsobenie. Používa únikové kódy na zadanie zmien farby a formátovania vo výzve. Ak chcete dosiahnuť rovnaké prispôsobenie ako Zsh vyššie, môžete použiť nasledujúcu vlastnú výzvu.

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

Použitím \[3[0m\] je veľmi dôležité, pretože zaisťuje, že zmeny farieb neovplyvnia text, ktorý nasleduje po výzve.

2. Podpora pre asociatívne polia

Zsh natívne podporuje asociatívne polia. Tieto polia poskytujú pohodlný spôsob spájania údajov, ktorý uľahčuje organizáciu a získavanie informácií. Použite vyhlásiť -A príkaz na explicitné deklarovanie asociatívneho poľa:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

Potom môžete asociatívnemu poľu priradiť hodnoty:

 my_assoc_array=(key1 value1 key2 value2) 

A nakoniec pristupujte k hodnotám pomocou ich kľúčov:

 echo $my_assoc_array[key1] # Outputs: value1

Bash zahrnul natívnu podporu pre asociatívne polia od verzie 4.0. Hodnoty deklarujete a priraďujete rovnakým spôsobom ako v Zsh. Ale pokiaľ ide o prístup k hodnotám poľa, musíte kľúč zabaliť do zložených zátvoriek:

 echo "${my_assoc_array[key1]}" 

Hlavným rozdielom je, že podpora Zsh pre asociatívne polia je bohatšia a pokročilejšia ako Bash. Zsh umožňuje, aby asociatívne polia mali kľúče rôznych dátových typov, nielen reťazce. Bash podporuje iba reťazcové kľúče.

ako nájsť diskovú jednotku v systéme Windows 10

V predchádzajúcich verziách Bash musíte nájsť spôsob, ako vyriešiť tento problém, alebo mať externé nástroje na používanie asociatívnych polí.

3. Rozšírené guľové vzory

Rozšírené guľové vzory poskytujú výkonný a flexibilný spôsob výberu a manipulácie so súbormi a adresármi na základe rôznych kritérií. Sú užitočné, keď pracujete so zložitými štruktúrami súborov alebo keď potrebujete presnú kontrolu nad výberom súborov.

V skripte Zsh môžete tieto vzory povoliť pomocou setopt príkaz. Napríklad, aby sa zhodovali so všetkými .TXT súbory v aktuálnom adresári:

 setopt extended_glob 
txt_files=(*.txt)

Ak chcete priradiť všetky súbory okrem súborov s príponou .log:

 setopt extended_glob 
non_log_files=^(*.log)

V Bash ich musíte povoliť pomocou obchody príkaz s extglob možnosť. Napríklad, aby sa zhodovali so všetkými .TXT súbory v aktuálnom adresári:

 shopt -s extglob 
txt_files=(*.txt)

Na priradenie všetkých súborov okrem tých s .log rozšírenie:

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

Hlavným rozdielom medzi Zsh a Bash, pokiaľ ide o globbingové vzory, je príkaz používaný na ich povolenie. Všimnite si však, že niektorí operátori sa medzi týmito dvoma shellmi líšia.

4. Rozšírené rozšírenie parametrov

Zsh podporuje nepriame rozšírenie parametrov. To vám umožňuje rozšíriť hodnotu premennej, ktorej názov je uložený v inej premennej. Aby ste to dosiahli, musíte pred názov premennej pridať výkričník ! .

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

Bash na druhej strane neumožňuje natívne nepriamu expanziu. Riešením tohto problému je použitie eval vstavaný príkaz alebo ${!was} syntax odkazov na nepriame premenné.

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

Podobnosti medzi Bash a Zsh

Aj keď existujú rozdiely medzi Bash a Zsh, zdieľajú aj niektoré podobnosti.

1. Syntax príkazového riadka

Bash a Zsh zdieľajú podobnú syntax príkazového riadku. To je skvelé, pretože to znamená, že väčšina príkazov a skriptov, ktoré napíšete, bude fungovať v oboch prostrediach bez úprav. Zsh je postavený na Bash, takže obsahuje všetky rovnaké základné príkazy a funkcie.

Existujú však veľmi malé rozdiely v syntaxi, ktoré budete musieť identifikovať a upraviť.

2. Konzistencia nahrádzania príkazov

Náhrada príkazov je proces vkladania výstupu jedného príkazu do druhého. Je konzistentný medzi oboma škrupinami.

 result=$(ls) 

V Bash aj Zsh môžete použiť $ (príkaz) syntax na nahradenie výstupu príkazu do premennej. To umožňuje jednoduchú prenosnosť skriptov medzi dvoma shellmi.

3. Možnosť ladenia skriptov

Používajú sa Bash aj Zsh -X príznak pre ladenie skriptov. Keď spustíte skript s týmto príznakom, pred spustením sa zobrazí každý príkaz. To vám pomôže identifikovať problémy vo vašich skriptoch.

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

echo "Debugging Bash script"

V tomto skripte Bash je -X príznak umožňuje ladenie. Podobný prístup môžete použiť v Zsh; len vymeniť bash s zsh .

ako sledovať miestne kanály v roku

Úvahy o výbere medzi Zsh a Bash

  • Kompatibilita a prenosnosť : Bash je predvolený shell na mnohých systémoch založených na Unixe. Vďaka tomu je bezpečnejšou voľbou pre multiplatformové skriptovanie. Ak potrebujete, aby vaše skripty bežali na širokej škále systémov bez úprav, Bash je lepšou voľbou.
  • Zložitosť skriptu a pokročilé funkcie : Zsh poskytuje pokročilé funkcie, ako sú asociatívne polia, rozšírené guľové vzory a pokročilé rozšírenie parametrov. To zjednodušuje zložité skriptovacie úlohy. Ak vaše skripty vyžadujú pokročilú manipuláciu s reťazcami alebo dátové štruktúry, Zsh je lepšou voľbou.
  • Ekosystém komunity a doplnkov : Bash aj Zsh majú aktívne komunity, ale Zsh má silnejšiu komunitu a rozsiahly ekosystém doplnkov a tém. Ak si ceníte prispôsobenie, živá komunita Zsh a podpora doplnkov môže byť významnou výhodou.
  • Jednoduchosť učenia : Ak ste novým shell skriptovaním, Bash je prístupnejším východiskovým bodom. Pre začiatočníkov má k dispozícii rozsiahlu dokumentáciu a zdroje. To uľahčuje osvojenie si základov shell skriptovania.

Automatizácia úloh pomocou skriptov Shell

Vedieť, ako automatizovať úlohy pomocou shell skriptov, je veľmi dôležité. Môžete automatizovať opakujúce sa úlohy a ušetriť veľa času.

Tieto skripty môžete použiť aj na správu používateľských účtov, monitorovanie systémových prostriedkov, zálohovanie údajov a vykonávanie bežnej údržby. Keď sú starostlivo napísané, môžu tiež znížiť možnosť ľudskej chyby.