Zsh vs. Bash Scripting. Ano ang pinagkaiba?

Zsh vs. Bash Scripting. Ano ang pinagkaiba?
Ang mga mambabasang tulad mo ay tumutulong sa pagsuporta sa MUO. Kapag bumili ka gamit ang mga link sa aming site, maaari kaming makakuha ng isang affiliate na komisyon. Magbasa pa.

Pagdating sa shell scripting sa mga operating system na katulad ng Unix, dalawang shell ang nangingibabaw: Bash (Bourne Again Shell) at Zsh (Z Shell). Kung ikaw ay isang programmer o isang system administrator, ang pagpili sa pagitan ng dalawang ito ay makabuluhang nakakaapekto sa iyong kahusayan at pagiging produktibo.





kung paano makahanap ng address ng ip ng network printer
MUO Video ng araw MAG-SCROLL PARA MAGPATULOY SA NILALAMAN

Ang pag-unawa sa mga pagkakaiba at pagkakatulad sa pagitan ng dalawang shell na ito ay makakatulong sa iyong i-optimize ang iyong command-line workflow. Ang pag-alam tungkol sa mga nuances ng bawat shell ay makakatulong sa iyong gumawa ng matalinong mga desisyon.





Ano ang Bash at Zsh?

Ang Bash ay sikat sa parehong Linux at macOS system. Isa itong makapangyarihang tool na magagamit mo upang makipag-ugnayan sa operating system at magpatakbo ng mga command. Kaya mo rin gumamit ng Bash para sa shell scripting , na nag-o-automate ng mga gawain sa pamamagitan ng pagsusulat ng mga script na naglalaman ng higit sa isang command.





Ang Zsh (Z shell) ay isang pinahabang bersyon ng Bash na may marami pang feature. Ito ang default na shell sa macOS. Lalo din itong nagiging popular sa mga sistema ng Linux.

Paano Lumipat Mula sa Bash patungong Zsh

Kung gumagamit ka ng Linux system at gustong lumipat sa Zsh, magsimula gamit ang iyong manager ng package para i-install ito . Halimbawa, sa Debian o Ubuntu, gamitin ang sumusunod na command:



 sudo apt install zsh

Pagkatapos i-install ito sa iyong system, lumipat dito sa pamamagitan ng pagpapatakbo ng sumusunod na command:

 chsh -s $(which zsh)

Kung gumagamit ka ng macOS, naka-install na ang Zsh. Upang lumipat dito patakbuhin ang sumusunod na command:





 chsh -s /bin/zsh

Upang bumalik sa Bash, palitan ang Zsh ng Bash sa mga command sa itaas.

Upang suriin kung aling shell ang iyong ginagamit, patakbuhin ang sumusunod na command:





 echo $SHELL

Makakatulong ito sa iyong kumpirmahin na ginagamit mo ang shell na nilalayon mo.

Mga Pagkakaiba sa pagitan ng Zsh at Bash

Mayroong ilang mga pagkakaiba sa pagitan ng Zsh at Bash. Ang pagsasaalang-alang sa mga pagkakaibang ito ay makakatulong sa iyong magpasya kung aling shell ang pinakaangkop sa iyo.

1. Mabilis na Pag-customize

Nag-aalok ang Zsh ng mas madaling paraan para sa pag-customize ng iyong mga prompt gamit % -based na mga pagkakasunud-sunod ng pagtakas. Nagbibigay-daan ito para sa mga dynamic na prompt na may kulay at impormasyon. Upang i-customize ang iyong shell prompt, tukuyin ang PS1 (Pangunahing Prompt).

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

Ipinapakita ng custom na prompt sa itaas ang username, hostname, at kasalukuyang direktoryo sa iba't ibang kulay:

  Zsh prompt pagpapasadya sa terminal

marami naman iba pang mga paraan upang i-customize ang Zsh prompt , hinahayaan kang magtakda ng tagapagpahiwatig ng admin, isama ang petsa at oras, at i-save ang bagong prompt.

Gumagamit ang Bash ng bahagyang naiibang diskarte pagdating sa prompt na pag-customize. Gumagamit ito ng mga escape code upang tukuyin ang kulay at mga pagbabago sa pag-format sa prompt. Upang makamit ang parehong pag-customize gaya ng Zsh sa itaas, maaari mong gamitin ang sumusunod na custom na prompt.

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

Gamit \[3[0m\] ay mahalaga dahil tinitiyak nito na ang mga pagbabago sa kulay ay hindi makakaapekto sa text na sumusunod sa prompt.

2. Suporta para sa Mga Associative Array

Ang Zsh ay katutubong sumusuporta sa mga nag-uugnay na array. Nagbibigay ang mga array na ito ng maginhawang paraan upang iugnay ang data na nagpapadali sa pag-aayos at pagkuha ng impormasyon. Gamitin magpahayag -A utos na tahasang magdeklara ng isang associative array:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

Pagkatapos ay maaari kang magtalaga ng mga halaga sa associative array:

 my_assoc_array=(key1 value1 key2 value2) 

At, sa wakas, i-access ang mga halaga gamit ang kanilang mga susi:

 echo $my_assoc_array[key1] # Outputs: value1

Ang Bash ay may kasamang katutubong suporta para sa mga nag-uugnay na array mula noong bersyon 4.0. Idineklara at itinalaga mo ang mga halaga sa parehong paraan tulad ng gagawin mo sa Zsh. Ngunit pagdating sa pag-access sa mga halaga ng array, kailangan mong balutin ang susi sa loob ng mga kulot na bracket:

 echo "${my_assoc_array[key1]}" 

Ang pangunahing pagkakaiba ay ang suporta ni Zsh para sa mga associative array ay mas mayaman sa tampok at advanced kaysa sa Bash. Binibigyang-daan ng Zsh ang mga associative array na magkaroon ng mga key ng iba't ibang uri ng data, hindi lang mga string. Sinusuportahan lang ng Bash ang mga string key.

Sa mga naunang bersyon ng Bash, kailangan mong mag-isip ng paraan sa mga workaround o magkaroon ng mga panlabas na tool para gumamit ng mga associative array.

3. Mga Extended Globbing Pattern

Ang mga pinahabang globbing pattern ay nagbibigay ng isang makapangyarihan at nababaluktot na paraan upang piliin at manipulahin ang mga file at direktoryo batay sa iba't ibang pamantayan. Kapaki-pakinabang ang mga ito kapag nagtatrabaho ka sa mga kumplikadong istruktura ng file o kapag kailangan mo ng tumpak na kontrol sa mga seleksyon ng file.

Sa isang Zsh script, maaari mong paganahin ang mga pattern na ito gamit ang setopt utos. Halimbawa, upang tumugma sa lahat .txt mga file sa kasalukuyang direktoryo:

hindi nagcha-charge ang baterya ng laptop ko
 setopt extended_glob 
txt_files=(*.txt)

Upang tumugma sa lahat ng mga file maliban sa mga may extension na .log:

 setopt extended_glob 
non_log_files=^(*.log)

Sa Bash, kailangan mong paganahin ang mga ito gamit ang mga tindahan utos kasama ang extglob opsyon. Halimbawa, upang tumugma sa lahat .txt mga file sa kasalukuyang direktoryo:

 shopt -s extglob 
txt_files=(*.txt)

Upang tumugma sa lahat ng mga file maliban sa mga may .log extension:

kung gaano katindi ang init para sa computer
 shopt -s extglob 
non_log_files=!(*.log)

Ang pangunahing pagkakaiba sa pagitan ng Zsh at Bash pagdating sa globbing pattern ay ang command na ginamit para paganahin ang mga ito. Gayunpaman, pansinin na ang ilang mga operator ay naiiba sa pagitan ng dalawang shell.

4. Advanced na Pagpapalawak ng Parameter

Sinusuportahan ng Zsh ang hindi direktang pagpapalawak ng mga parameter. Binibigyang-daan ka nitong palawakin ang halaga ng isang variable na ang pangalan ay nakaimbak sa isa pang variable. Upang makamit ito, kailangan mong i-prefix ang variable na pangalan na may tandang padamdam ! .

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

Ang Bash sa kabilang banda ay hindi pinapayagan ang hindi direktang pagpapalawak nang natively. Ang workaround para dito ay ang paggamit ng eval built-in command o ang ${!was} syntax para sa mga hindi direktang variable na sanggunian.

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

Pagkakatulad sa pagitan ng Bash at Zsh

Bagama't may mga pagkakaiba sa pagitan ng Bash at Zsh, nagbabahagi rin sila ng ilang pagkakatulad.

1. Command Line Syntax

Ang Bash at Zsh ay nagbabahagi ng magkatulad na command line syntax. Ito ay mahusay dahil nangangahulugan ito na karamihan sa mga utos at script na iyong isinulat ay gagana sa alinman sa shell, nang walang pagbabago. Binuo ang Zsh sa ibabaw ng Bash, kaya kasama nito ang lahat ng parehong pangunahing command at feature.

Gayunpaman, mayroong napakaliit na pagkakaiba sa syntax na kakailanganin mong tukuyin at ayusin.

2. Pagkakatugma ng Pagpapalit ng Utos

Ang pagpapalit ng command ay ang proseso ng pag-embed ng output ng isang command sa isa pa. Ito ay pare-pareho sa pagitan ng parehong mga shell.

 result=$(ls) 

Sa parehong Bash at Zsh, maaari mong gamitin ang $(utos) syntax upang palitan ang output ng isang command sa isang variable. Nagbibigay-daan ito para sa madaling portability ng mga script sa pagitan ng dalawang shell.

3. Pagpipilian sa Pag-debug ng Script

Parehong ginagamit ang Bash at Zsh -x flag para sa pag-debug ng script. Kapag nagpatakbo ka ng script gamit ang flag na ito, ipinapakita nito ang bawat command bago ito tumakbo. Tinutulungan ka nitong matukoy ang mga isyu sa iyong mga script.

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

echo "Debugging Bash script"

Sa script ng Bash na ito, ang -x pinapagana ng flag ang pag-debug. Maaari kang gumamit ng katulad na diskarte sa Zsh; palitan na lang bash kasama zsh .

Mga Pagsasaalang-alang para sa Pagpili sa pagitan ng Zsh at Bash

  • Pagkakatugma at Portability : Ang Bash ay ang default na shell sa maraming mga sistemang nakabatay sa Unix. Ginagawa nitong mas ligtas na pagpipilian para sa cross-platform na scripting. Kung kailangan mong tumakbo ang iyong mga script sa isang malawak na hanay ng mga system nang walang pagbabago, ang Bash ay isang mas mahusay na opsyon.
  • Pagiging Kumplikado ng Script at Advanced na Mga Tampok : Nagbibigay ang Zsh ng mga advanced na feature tulad ng mga associative array, pinahabang globbing pattern, at advanced na pagpapalawak ng parameter. Pinapasimple nito ang mga kumplikadong gawain sa pag-script. Kung ang iyong mga script ay nangangailangan ng advanced na pagmamanipula ng string o mga istruktura ng data, ang Zsh ay isang mas mahusay na pagpipilian.
  • Komunidad at Plugin Ecosystem : Parehong may aktibong komunidad ang Bash at Zsh, ngunit may mas malakas na komunidad ang Zsh at malawak na ecosystem ng mga plugin at tema. Kung pinahahalagahan mo ang pagpapasadya, ang masiglang komunidad ng Zsh at suporta sa plugin ay maaaring maging isang malaking kalamangan.
  • Dali ng Pagkatuto : Kung bago ka sa shell scripting, ang Bash ay isang mas madaling mapupuntahan na panimulang punto. Mayroon itong malawak na dokumentasyon at mga mapagkukunang magagamit para sa mga nagsisimula. Ginagawa nitong mas madaling matutunan ang mga pangunahing kaalaman sa shell scripting.

Pag-automate ng Mga Gawain Gamit ang Mga Shell Script

Ang pag-alam kung paano i-automate ang mga gawain gamit ang mga script ng shell ay napakahalaga. Maaari mong i-automate ang mga paulit-ulit na gawain at makatipid ng maraming oras.

Maaari mo ring gamitin ang mga script na ito upang pamahalaan ang mga user account, subaybayan ang mga mapagkukunan ng system, i-back up ang data, at magsagawa ng regular na pagpapanatili. Kapag maingat na isinulat, maaari din nilang bawasan ang potensyal para sa pagkakamali ng tao.