sh vs bash : Podsumowanie
Jeśli czytasz to, jest duża szansa, że natknąłeś się na terminy shell, sh, bash itp. w przeszłości. Terminy te mogą wydawać się mylące, a ponieważ są one blisko spokrewnione, co sprawia, że problem jest jeszcze gorszy. Więc zdecydowałem się napisać ten post w celu wyjaśnienia różnic między nimi.
Powłoka vs Jądro
Przed przejściem dalej ważne jest, abyśmy zrozumieli co oznaczają terminy powłoka i jądro.
Jądro
Jądro jest centrum systemu operacyjnego. Jest odpowiedzialne za takie rzeczy jak interakcja ze sprzętem, wykonywanie operacji wejścia/wyjścia plików i wywoływanie procesów.
Powłoka
Powłoka działa jako interfejs między użytkownikiem a jądrem. Technicznie rzecz biorąc, powłoka jest interpreterem wiersza poleceń, tj. programem, który albo interpretuje polecenia wprowadzane przez użytkownika w emulatorze terminala (tryb interaktywny), albo przetwarza skrypty powłoki (pliki tekstowe zawierające polecenia).
Teraz, gdy mamy już pojęcie, czym są powłoka i jądro, możemy spróbować zrozumieć sh i Bash.
sh
Ściśle mówiąc, sh (lub język poleceń powłoki) jest językiem programowania opisanym przez standard POSIX. Kluczem jest tu fakt, że sh nie jest tak naprawdę językiem programowania samym w sobie. Jest to po prostu specyfikacja. Specyfikacja jest szczegółowym opisem składni i semantyki tego języka. Specyfikacja nie zawiera implementacji.
Bash
Istnieją różne systemy operacyjne z ich własnymi powłokami i jądrami. Bash jest powłoką dla systemu operacyjnego GNU. Ale możemy też powiedzieć, że bash jest językiem programowania.
Czekaj, czy to nie jest mylące? Czy bash jest zarówno powłoką, jak i językiem programowania?
Pomyślmy o pythonie. Możemy również uruchomić Pythona w trybie interaktywnym i zachowuje się on jak powłoka. Albo JavaScript, albo Ruby, albo jakikolwiek język skryptowy.
Ma to sens?
Więc bash jest językiem programowania, o którym można myśleć jako o implementacji sh (chociaż z czasem to się zmieniło).
Podsumowując, sh jest specyfikacją, bash jest implementacją.
.