Skrypty Zsh kontra Bash. Co za różnica?

Skrypty Zsh kontra Bash. Co za różnica?
Czytelnicy tacy jak Ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

Jeśli chodzi o skrypty powłoki w systemach operacyjnych typu Unix, dominują dwie powłoki: Bash (Bourne Again Shell) i Zsh (Z Shell). Jeśli jesteś programistą lub administratorem systemu, wybór pomiędzy tymi dwoma znacząco wpływa na Twoją efektywność i produktywność.





MUO Film dnia PRZEWIŃ, ABY KONTYNUOWAĆ TREŚĆ

Zrozumienie różnic i podobieństw między tymi dwiema powłokami pomoże zoptymalizować przepływ pracy z wiersza poleceń. Znajomość niuansów każdej muszli pomoże Ci podejmować świadome decyzje.





Czym są Bash i Zsh?

Bash jest popularny zarówno w systemach Linux, jak i macOS. To potężne narzędzie, którego można używać do interakcji z systemem operacyjnym i uruchamiania poleceń. Możesz również użyj Bash do skryptów powłoki , który automatyzuje zadania poprzez pisanie skryptów zawierających więcej niż jedno polecenie.





Zsh (powłoka Z) to rozszerzona wersja Basha, która ma o wiele więcej funkcji. Jest to domyślna powłoka w systemie macOS. Staje się również coraz bardziej popularny w systemach Linux.

Jak przejść z Bash na Zsh

Jeśli używasz systemu Linux i chcesz przejść na Zsh, zacznij od użyj menedżera pakietów, aby go zainstalować . Na przykład w Debianie lub Ubuntu użyj następującego polecenia:



 sudo apt install zsh

Po zainstalowaniu go w systemie przełącz się na niego, uruchamiając następującą komendę:

 chsh -s $(which zsh)

Jeśli używasz systemu macOS, Zsh jest już zainstalowany. Aby się do niego przełączyć, uruchom następujące polecenie:





 chsh -s /bin/zsh

Aby wrócić do Bash, zamień Zsh na Bash w powyższych poleceniach.

Aby sprawdzić, jakiej powłoki używasz, uruchom następującą komendę:





 echo $SHELL

Pomoże Ci to potwierdzić, że używasz powłoki, którą zamierzałeś.

kto szukał mnie w google?

Różnice między Zsh i Bash

Istnieje kilka różnic między Zsh i Bash. Uwzględnienie tych różnic pomoże Ci zdecydować, która skorupa będzie Ci najbardziej odpowiadać.

1. Szybka personalizacja

Zsh oferuje łatwiejszy sposób dostosowywania podpowiedzi za pomocą % oparte na sekwencjach ucieczki. Pozwala to na dynamiczne monity z kolorem i informacjami. Aby dostosować monit powłoki, zdefiniuj PS1 (Podstawowy monit).

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

Powyższy niestandardowy monit wyświetla nazwę użytkownika, nazwę hosta i bieżący katalog w różnych kolorach:

  Szybkie dostosowywanie Zsh na terminalu

Jest wiele inne sposoby dostosowania monitu Zsh , umożliwiając ustawienie wskaźnika administratora, dołączenie daty i godziny oraz zapisanie nowego monitu.

Bash stosuje nieco inne podejście, jeśli chodzi o szybkie dostosowywanie. Używa kodów ucieczki do określenia zmian koloru i formatowania w monicie. Aby osiągnąć takie samo dostosowanie jak powyżej Zsh, możesz użyć następującego niestandardowego monitu.

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

Za pomocą \[3[0m\] ma kluczowe znaczenie, ponieważ gwarantuje, że zmiany kolorów nie wpłyną na tekst następujący po podpowiedzi.

2. Obsługa tablic asocjacyjnych

Zsh natywnie obsługuje tablice asocjacyjne. Tablice te zapewniają wygodny sposób kojarzenia danych, co ułatwia organizowanie i wyszukiwanie informacji. Używać ogłosić -A polecenie jawnego zadeklarowania tablicy asocjacyjnej:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

Następnie możesz przypisać wartości do tablicy asocjacyjnej:

 my_assoc_array=(key1 value1 key2 value2) 

I na koniec uzyskaj dostęp do wartości za pomocą ich kluczy:

 echo $my_assoc_array[key1] # Outputs: value1

Bash zawiera natywną obsługę tablic asocjacyjnych od wersji 4.0. Deklarujesz i przypisujesz wartości w taki sam sposób, jak w Zsh. Ale jeśli chodzi o dostęp do wartości tablicy, musisz owinąć klucz w nawiasy klamrowe:

 echo "${my_assoc_array[key1]}" 

Główna różnica polega na tym, że obsługa tablic asocjacyjnych w Zsh jest bardziej bogata w funkcje i zaawansowana niż Bash. Zsh pozwala tablicom asocjacyjnym mieć klucze różnych typów danych, a nie tylko ciągi znaków. Bash obsługuje tylko klucze łańcuchowe.

We wcześniejszych wersjach Bash trzeba było znaleźć sposób na obejście tego problemu lub dysponować zewnętrznymi narzędziami do korzystania z tablic asocjacyjnych.

3. Rozszerzone wzorce globowania

Rozszerzone wzorce manipulacji zapewniają potężny i elastyczny sposób wybierania plików i katalogów oraz manipulowania nimi w oparciu o różne kryteria. Są przydatne, gdy pracujesz ze złożonymi strukturami plików lub gdy potrzebujesz precyzyjnej kontroli nad wyborem plików.

W skrypcie Zsh możesz włączyć te wzorce za pomocą ustawienie Komenda. Na przykład, aby dopasować wszystko .tekst pliki w bieżącym katalogu:

 setopt extended_glob 
txt_files=(*.txt)

Aby dopasować wszystkie pliki z wyjątkiem tych z rozszerzeniem .log:

 setopt extended_glob 
non_log_files=^(*.log)

W Bash musisz je włączyć za pomocą sklepy polecenie za pomocą extglob opcja. Na przykład, aby dopasować wszystko .tekst pliki w bieżącym katalogu:

 shopt -s extglob 
txt_files=(*.txt)

Aby dopasować wszystkie pliki z wyjątkiem tych z .dziennik rozszerzenie:

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

Główną różnicą między Zsh i Bash, jeśli chodzi o wzorce globowania, jest polecenie używane do ich włączania. Należy jednak zauważyć, że niektóre operatory różnią się w przypadku obu powłok.

4. Zaawansowane rozszerzanie parametrów

Zsh obsługuje pośrednie rozszerzanie parametrów. Umożliwia to rozszerzenie wartości zmiennej, której nazwa jest przechowywana w innej zmiennej. Aby to osiągnąć, należy poprzedzić nazwę zmiennej wykrzyknikiem ! .

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

Z drugiej strony Bash nie pozwala natywnie na pośrednią ekspansję. Rozwiązaniem tego problemu jest użycie ocena polecenie wbudowane lub ${!był} składnia pośrednich odniesień do zmiennych.

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

Podobieństwa między Bashem i Zshem

Chociaż istnieją różnice między Bash i Zsh, mają one również pewne podobieństwa.

1. Składnia wiersza poleceń

Bash i Zsh mają podobną składnię wiersza poleceń. Jest to świetne rozwiązanie, ponieważ oznacza, że ​​większość poleceń i skryptów, które napiszesz, będzie działać w dowolnej powłoce, bez modyfikacji. Zsh jest zbudowany na bazie Bash, więc zawiera te same podstawowe polecenia i funkcje.

jak anulować rozpalać bez ograniczeń?

Istnieją jednak bardzo niewielkie różnice w składni, które należy zidentyfikować i dostosować.

2. Spójność zastępowania poleceń

Podstawianie poleceń to proces osadzania wyników jednego polecenia w innym. Jest to spójne pomiędzy obydwoma powłokami.

 result=$(ls) 

Zarówno w Bash, jak i Zsh możesz używać $(polecenie) składnia zastępująca dane wyjściowe polecenia zmienną. Pozwala to na łatwe przenoszenie skryptów pomiędzy dwiema powłokami.

3. Opcja debugowania skryptu

Zarówno Bash, jak i Zsh używają -X flaga do debugowania skryptu. Kiedy uruchamiasz skrypt z tą flagą, wyświetla on każde polecenie przed uruchomieniem. Pomaga to zidentyfikować problemy w skryptach.

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

echo "Debugging Bash script"

W tym skrypcie Bash plik -X flaga umożliwia debugowanie. Możesz zastosować podobne podejście w Zsh; po prostu wymień grzmotnąć z zsz .

Rozważania dotyczące wyboru między Zsh i Bash

  • Kompatybilność i przenośność : Bash jest domyślną powłoką w wielu systemach uniksowych. Dzięki temu jest to bezpieczniejszy wybór w przypadku skryptów międzyplatformowych. Jeśli potrzebujesz, aby Twoje skrypty działały na wielu różnych systemach bez modyfikacji, Bash będzie lepszą opcją.
  • Złożoność skryptu i zaawansowane funkcje : Zsh zapewnia zaawansowane funkcje, takie jak tablice asocjacyjne, rozszerzone wzorce globowania i zaawansowane rozszerzanie parametrów. Upraszcza to złożone zadania skryptowe. Jeśli Twoje skrypty wymagają zaawansowanej manipulacji ciągami lub struktur danych, lepszym wyborem będzie Zsh.
  • Ekosystem społeczności i wtyczek : Zarówno Bash, jak i Zsh mają aktywne społeczności, ale Zsh ma silniejszą społeczność i rozbudowany ekosystem wtyczek i motywów. Jeśli cenisz sobie personalizację, dynamiczna społeczność Zsh i obsługa wtyczek mogą być znaczącą zaletą.
  • Łatwość uczenia się : Jeśli dopiero zaczynasz przygodę ze skryptami powłoki, bardziej przystępnym punktem wyjścia będzie Bash. Zawiera obszerną dokumentację i zasoby dostępne dla początkujących. Ułatwia to naukę podstaw skryptów powłoki.

Automatyzacja zadań za pomocą skryptów powłoki

Wiedza o tym, jak zautomatyzować zadania za pomocą skryptów powłoki, jest bardzo ważna. Możesz zautomatyzować powtarzalne zadania i zaoszczędzić mnóstwo czasu.

Możesz także używać tych skryptów do zarządzania kontami użytkowników, monitorowania zasobów systemowych, tworzenia kopii zapasowych danych i wykonywania rutynowych prac konserwacyjnych. Starannie napisane mogą również zmniejszyć ryzyko wystąpienia błędu ludzkiego.