7

Z tego, co mam do tej pory przeczytać, bash wydaje się pasować do Definition of interpretowanym języku:Czy bash jest językiem interpretowanym?

jednak nie mogłem znaleźć odniesienie do bash na Wikipedia's page for interpreted languages lub przez obszerne wyszukiwania w Google. Zauważyłem też, że a page na Exchange Stack programistów wydaje się sugerować, że bash nie jest językiem interpretowanym - jeśli nie jest, to co to jest?

+1

Wystarczy wyjaśnić - pytanie zostało poproszone, ponieważ nie masz pewności, że konkretna strona na Wikipedii może zostać uznana za w 100% kompletną i poprawną? –

+1

Wydaje się to rodzajem pytania, które rozpoczyna dyskusję, w której wszyscy zgadzają się co do tego, co się dzieje, ale każdy ma silne i sprzeczne opinie na temat definiowania terminologii. Po prostu staram się unikać tematu. – user2357112

+0

@GregHewgill Zaktualizowane pytanie do wyjaśnienia. –

Odpowiedz

13

Bash to zdecydowanie interpretowane jako; Nie sądzę, żeby było na to jakieś rozsądne pytanie.

Możliwe, że pojawią się pewne kontrowersje dotyczące tego, czy jest to język . Jest przeznaczony przede wszystkim do użytku interaktywnego, wykonując polecenia dostarczane przez system operacyjny. Dla wielu danego rodzaju użytkowania, jeśli jesteś po prostu wpisując komendy jak

echo hello 

lub

cp foo.txt bar.txt 

Łatwo jest myśleć, że to „tylko” do wykonywania prostych poleceń. W tym sensie różni się od języków interpretowanych, takich jak Perl i Python, które, choć mogą być używane interaktywnie, są używane głównie do pisania skryptów (zinterpretowanych programów).

Jedną z konsekwencji tego nacisku jest to, że jego konstrukcja jest zoptymalizowana do użytku interaktywnego. Ciągi nie wymagają cudzysłowów, większość poleceń jest wykonywana natychmiast po ich wprowadzeniu, większość czynności, które z nimi zrobisz, będzie wywoływać programy zewnętrzne, a nie wbudowane funkcje i tak dalej.

Ale jak wiemy, możliwe jest również pisanie skryptów za pomocą bash, a bash ma wiele funkcji, szczególnie konstrukcje sterowania przepływem, które są przede wszystkim do użycia w skryptach (choć mogą być również używane z linii poleceń) .

Kolejną różnicą między bash a wieloma językami skryptowymi jest to, że skrypt bash jest odczytywany, analizowany i wykonywany w kolejności. Błąd składni w środku skryptu basha nie zostanie wykryty, dopóki nie dojdzie do jego wykonania. Natomiast skrypt Perl lub Python jest analizowany całkowicie przed rozpoczęciem wykonywania. (Rzeczy takie jak eval mogą to zmienić, ale ogólny pomysł jest prawidłowy.) Jest to znacząca różnica, ale nie oznacza ostrej linii podziału. Jeśli coś sprawia, że ​​Perl i Python są bardziej podobne do języków kompilowanych.

Dolna linia: Tak, bash jest językiem interpretowanym. Lub, być może bardziej precyzyjnie, bash jest tłumaczem dla języka interpretowanego.(Nazwa "bash" zwykle odnosi się do powłoki/interpretera, a nie do języka, który interpretuje.) Różnica między tymi językami jest inna niż w innych językach interpretowanych, które zostały zaprojektowane od początku do skryptowania, ale te różnice nie są wystarczające do usunięcia. to z kategorii "języki interpretowane".

+0

+1. Odp: "Możliwe, że pojawią się pewne kontrowersje dotyczące tego, czy jest to * język *": czy może * język programowania *. Na przykład, myślę, że więcej osób zaakceptowałoby to, że HTML jest "interpretowany" przez przeglądarkę, niż mogłoby się wydawać, że jest to "język interpretowany", ponieważ "język interpretowany" oznacza "zinterpretowany język programowania", do domniemania wykluczenia języków znaczników. – ruakh