Zsh срещу Bash Scripting. Каква е разликата?

Zsh срещу Bash Scripting. Каква е разликата?
Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Когато става въпрос за скриптове на обвивка на Unix-подобни операционни системи, доминират две обвивки: Bash (Bourne Again Shell) и Zsh (Z Shell). Ако сте програмист или системен администратор, изборът между тези двама оказва значително влияние върху вашата ефективност и продуктивност.





MUO Видео на деня ПРЕВЪРТЕТЕ, ЗА ДА ПРОДЪЛЖИТЕ СЪС СЪДЪРЖАНИЕТО

Разбирането на разликите и приликите между тези две черупки ще ви помогне да оптимизирате работния процес на командния ред. Познаването на нюансите на всяка черупка ще ви помогне да вземете информирани решения.





Какво представляват Bash и Zsh?

Bash е популярен както на Linux, така и на macOS системи. Това е мощен инструмент, който можете да използвате, за да взаимодействате с операционната система и да изпълнявате команди. Можете също използвайте Bash за шел скриптове , който автоматизира задачите чрез писане на скриптове, съдържащи повече от една команда.





Zsh (Z shell) е разширена версия на Bash, която има много повече функции. Това е обвивката по подразбиране на macOS. Също така става все по-популярен в Linux системи.

Как да превключите от Bash към Zsh

Ако използвате Linux система и искате да преминете към Zsh, започнете с като използвате вашия мениджър на пакети, за да го инсталирате . Например в Debian или Ubuntu използвайте следната команда:



 sudo apt install zsh

След като го инсталирате на вашата система, преминете към него, като изпълните следната команда:

 chsh -s $(which zsh)

Ако използвате macOS, Zsh вече е инсталиран. За да превключите към него, изпълнете следната команда:





 chsh -s /bin/zsh

За да превключите обратно към Bash, заменете Zsh с Bash в горните команди.

За да проверите коя обвивка използвате, изпълнете следната команда:





 echo $SHELL

Това ще ви помогне да потвърдите, че използвате черупката, която сте възнамерявали.

Разлики между Zsh и Bash

Има няколко разлики между Zsh и Bash. Разглеждането на тези разлики ще ви помогне да решите коя черупка ви подхожда най-добре.

1. Бързо персонализиране

Zsh предлага по-лесен начин за персонализиране на вашите подкани с помощта на % -базирани последователности за бягство. Това позволява динамични подкани с цвят и информация. За да персонализирате подканата на обвивката, дефинирайте PS1 (Първичен ред).

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

Горната персонализирана подкана показва потребителското име, името на хоста и текущата директория в различни цветове:

  Персонализиране на Zsh подкана на терминала

Има много други начини за персонализиране на подканата Zsh , което ви позволява да зададете администраторски индикатор, да включите датата и часа и да запазите новата подкана.

Bash използва малко по-различен подход, когато става въпрос за бързо персонализиране. Той използва екраниращи кодове, за да посочи промените в цвета и форматирането в подканата. За да постигнете същата персонализация като Zsh по-горе, можете да използвате следната персонализирана подкана.

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

Използвайки \[3[0m\] е от решаващо значение, тъй като гарантира, че промените в цвета не засягат текста, който следва подканата.

2. Поддръжка на асоциативни масиви

Zsh естествено поддържа асоциативни масиви. Тези масиви предоставят удобен начин за свързване на данни, което улеснява организирането и извличането на информация. Използвайте декларирам команда за изрично деклариране на асоциативен масив:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

След това можете да присвоите стойности на асоциативния масив:

 my_assoc_array=(key1 value1 key2 value2) 

И накрая, достъп до стойностите с техните ключове:

 echo $my_assoc_array[key1] # Outputs: value1

Bash включва собствена поддръжка за асоциативни масиви от версия 4.0. Вие декларирате и присвоявате стойности по същия начин, както бихте направили в Zsh. Но когато става въпрос за достъп до стойности на масив, трябва да поставите ключа във фигурни скоби:

 echo "${my_assoc_array[key1]}" 

Основната разлика е, че поддръжката на Zsh за асоциативни масиви е по-богата на функции и напреднала от Bash. Zsh позволява на асоциативните масиви да имат ключове от различни типове данни, а не само низове. Bash поддържа само ключове от низове.

В по-ранните версии на Bash трябва да намерите начин за заобиколни решения или да имате външни инструменти за използване на асоциативни масиви.

3. Разширени шарени модели

Разширените шаблони за глобиране предоставят мощен и гъвкав начин за избор и манипулиране на файлове и директории въз основа на различни критерии. Те са полезни, когато работите със сложни файлови структури или когато имате нужда от прецизен контрол върху избора на файлове.

В Zsh скрипт можете да активирате тези модели, като използвате сетопт команда. Например, за да съпоставите всички .текст файлове в текущата директория:

 setopt extended_glob 
txt_files=(*.txt)

За да съпоставите всички файлове с изключение на тези с разширение .log:

 setopt extended_glob 
non_log_files=^(*.log)

В Bash трябва да ги активирате с помощта на магазини команда с extglob опция. Например, за да съпоставите всички .текст файлове в текущата директория:

 shopt -s extglob 
txt_files=(*.txt)

За да съпоставите всички файлове с изключение на тези с .дневник разширение:

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

Основната разлика между Zsh и Bash, когато става въпрос за шаблони за глобиране, е командата, използвана за активирането им. Забележете обаче, че някои оператори са различни между двете обвивки.

4. Разширено разширяване на параметрите

Zsh поддържа индиректното разширяване на параметрите. Това ви позволява да разширите стойността на променлива, чието име се съхранява в друга променлива. За да постигнете това, трябва да поставите пред името на променливата удивителен знак ! .

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

Bash, от друга страна, не позволява непряко разширяване нативно. Заобиколното решение за това е използването на eval вградена команда или ${!беше} синтаксис за непреки препратки към променливи.

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

Прилики между Bash и Zsh

Въпреки че има разлики между Bash и Zsh, те също споделят някои прилики.

1. Синтаксис на командния ред

Bash и Zsh споделят подобен синтаксис на командния ред. Това е страхотно, защото означава, че повечето команди и скриптове, които пишете, ще работят в която и да е обвивка, без модификация. Zsh е изграден върху Bash, така че включва всички същите основни команди и функции.

Има обаче много малки разлики в синтаксиса, които ще трябва да идентифицирате и коригирате.

2. Последователност на заместване на команди

Заместването на команда е процес на вграждане на изхода от една команда в друга. Съгласува се между двете черупки.

как да копирам dvd на твърд диск
 result=$(ls) 

И в Bash, и в Zsh можете да използвате $(команда) синтаксис за заместване на изхода от команда в променлива. Това позволява лесна преносимост на скриптове между двете обвивки.

3. Опция за отстраняване на грешки в скрипта

И Bash, и Zsh използват флаг за отстраняване на грешки в скрипта. Когато стартирате скрипт с този флаг, той показва всяка команда, преди да се изпълни. Това ви помага да идентифицирате проблеми във вашите скриптове.

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

echo "Debugging Bash script"

В този Bash скрипт, флаг позволява отстраняване на грешки. Можете да използвате подобен подход в Zsh; просто сменете баш с zsh .

Съображения за избор между Zsh и Bash

  • Съвместимост и преносимост : Bash е обвивката по подразбиране на много Unix-базирани системи. Това го прави по-безопасен избор за крос-платформени скриптове. Ако имате нужда вашите скриптове да работят на широк набор от системи без модификация, Bash е по-добра опция.
  • Сложност на скрипта и разширени функции : Zsh предоставя разширени функции като асоциативни масиви, разширени модели за глобиране и разширено разширяване на параметри. Това опростява сложните скриптови задачи. Ако вашите скриптове изискват разширено манипулиране на низове или структури от данни, Zsh е по-добър избор.
  • Екосистема на общността и приставките : Както Bash, така и Zsh имат активни общности, но Zsh има по-силна общност и обширна екосистема от плъгини и теми. Ако цените персонализирането, жизнената общност на Zsh и поддръжката на плъгини могат да бъдат значително предимство.
  • Лесно обучение : Ако не сте запознати със скриптовете на shell, Bash е по-достъпна отправна точка. Има обширна документация и ресурси, достъпни за начинаещи. Това улеснява изучаването на основите на шел скриптовете.

Автоматизиране на задачи с помощта на скриптове на Shell

Знанието как да автоматизирате задачи с помощта на шел скриптове е от голямо значение. Можете да автоматизирате повтарящи се задачи и да спестите много време.

Можете също да използвате тези скриптове за управление на потребителски акаунти, наблюдение на системните ресурси, архивиране на данни и извършване на рутинна поддръжка. Когато са внимателно написани, те могат също да намалят потенциала за човешка грешка.