Bash czy Zsh, jaka jest różnica, po co używać jednego lub drugiego? [duplikować]

23

Pytanie w zasadzie mówi wszystko. Korzystam z systemu Snow Leopard i zajmuję się tworzeniem stron internetowych, szczególnie w Rails 3, która intensywnie korzysta z konsoli.

Widziałem kilku znamienitych blogerów itp. Wspominających Zsh jako o swojej woli przed Bash, ale nie wiem, jaką to by miało różnicę.

Czy ktoś mógłby mi dobrze porównać, jaka jest różnica i co może sprawić, że ktoś woli jedną lub drugą opcję?

Andrzej
źródło
1
Jeśli to pomoże, artykuł z 2016 roku: stackabuse.com/zsh-vs-bash
Cœur
To pytanie znów stało się aktualne, ponieważ jabłka przeszły na Zsh
amar

Odpowiedzi:

16

To jest z FAQ Zsh :

2.5: Podobieństwa z bash

Powłoka Bourne-Again, bash, jest kolejną ulepszoną powłoką podobną do Bourne'a; najbardziej oczywiste
różnica z zsh polega na tym, że nie próbuje on emulować powłoki Korna. Od kiedy oboje
muszle są w fazie aktywnej rozbudowy, prawdopodobnie nie ma sensu być zbyt szczegółowym 
tutaj. Ogólnie rzecz biorąc, bash poświęcił więcej uwagi zgodności ze standardami (tj. POSIX)
dłużej i jak dotąd unikał bardziej zawiłych funkcji interaktywnych (programowalnych 
zakończenie itp.), które ma zsh.

Użyłem ich obu, ale wolę Bash teraz dni, ponieważ komputery, na których domyślnie pracuję, konsekwentnie bashują. Komentarz dotyczący zgodności jest dla mnie ważny, ponieważ oznacza to spójność między systemami operacyjnymi.

Zsh ma niezłe zdolności autouzupełniania, ale ciągle znajdowałem przypadki, w których nie wiedziałem, czego chcę. To było kilka lat temu, więc od tego czasu mogło się poprawić.

Przekonałem się, że włączenie „vi-mode” ( set -o vi) w Bash sprawia, że ​​jest to o wiele ładniejsze środowisko wiersza poleceń niż zwykle, więc robię to natychmiast w moim .bashrcpliku.

Podczas pisania skryptów powłoki nigdy nie programuję ani w bash, ani w zsh - programuję za pomocą sh ( /bin/sh), ponieważ jest to najniższy wspólny mianownik i najmniej prawdopodobne problemy z kompatybilnością. To tylko stary nawyk, który dobrze mnie znosił.

Greg
źródło
2
Jedną różnicą jest to, że znaki wieloznaczne zachowują się inaczej. Na przykład, aby znaleźć wszystkie wystąpienia plików o nazwie „vi”, można użyć polecenia bash z poleceniem locate */vi. Przy użyciu zsh wynikiem dla tego samego polecenia jest zsh: no matches found: */vi. Aby wyszukiwanie działało w Zsh, zapytanie musi być otoczone cudzysłowami takimi jak locate "*/vi".
Pro Backup
Ale oba twoje przykłady działają w trybie bash.
John Stack