7

Из того, что я читал до сих пор, баш, кажется, соответствует дефиниции из интерпретируемого языка:Является ли bash интерпретируемым языком?

  • он не компилируются в нижний формат
  • каждый оператор заканчивается вызовом a subroutine/set of subroutines already translated into machine code (т.е. echo foo называет предкомпилированного исполняемый файл)
  • сам переводчик, bash, уже составлен

Однако я не смог найти ссылку на оглушить на Wikipedia's page for interpreted languages, или путем расширенного поиска в Google. Я также нашел a page на блоке диспетчера программ, который, по-видимому, подразумевает, что bash не является интерпретированным языком - если это не так, то что это?

+1

Просто уточнить - ваш вопрос был вызван, потому что вы не уверены, что определенную страницу в Википедии можно полагаться на 100% полной и правильной? –

+1

Это похоже на вопрос, который вызывает аргументы, когда все согласны с тем, что происходит на самом деле, но у всех есть сильные и противоречивые мнения о том, как определить терминологию. Я бы просто попытался избежать этой темы. – user2357112

+0

@GregHewgill Обновленный вопрос для уточнения. –

ответ

13

Bash определенно толковано; Я не думаю, что в этом есть разумный вопрос.

Возможно, возникнут некоторые разногласия по поводу того, является ли это языком. Он разработан в основном для интерактивного использования, выполняя команды, предоставляемые операционной системой. Для многих этого конкретного вида использования, если вы просто набрав команды, как

echo hello 

или

cp foo.txt bar.txt 

это легко думать, что это «просто» для выполнения простых команд. В этом смысле он сильно отличается от интерпретируемых языков, таких как Perl и Python, которые, хотя они могут использоваться в интерактивном режиме, в основном используются для написания сценариев сценариев (интерпретируемые программы).

Одним из следствий этого акцента является то, что его дизайн оптимизирован для интерактивного использования. Строки не требуют кавычек, большинство команд выполняются сразу после их ввода, большинство вещей, которые вы делаете с ней, будут вызывать внешние программы, а не встроенные функции и т. Д.

Но, как мы знаем, также возможно писать сценарии с использованием bash, а у bash есть много функций, в частности конструкций управления потоком, которые в основном используются в скриптах (хотя они также могут использоваться в командной строке) ,

Другое отличие между bash и многими языками сценариев заключается в том, что скрипт bash считывается, анализируется и выполняется в порядке. Синтаксическая ошибка в середине скрипта bash не будет обнаружена до тех пор, пока выполнение не достигнет ее. Сценарий Perl или Python, напротив, анализируется полностью до начала выполнения. (Такие вещи, как eval, могут изменить это, но общая идея верна.) Это существенное различие, но оно не указывает на резкую разделительную линию. Если что-то делает Perl и Python более похожими на скомпилированные языки.

Итог: Да, bash - это интерпретируемый язык. Или, может быть, более точно, bash является интерпретатором для интерпретируемого языка.(Имя «bash» обычно ссылается на интерпретатор оболочки или интерпретатор, а не на язык, который он интерпретирует.) Он имеет некоторые существенные отличия от других интерпретируемых языков, которые были разработаны с самого начала для сценариев, но этих различий недостаточно для удаления это из категории «интерпретируемых языков».

+0

+1. Re: «Возможно, есть некоторые разногласия по поводу того, является ли это * языком *: или, возможно, * языком программирования *. Например, я думаю, что больше людей согласятся с тем, что HTML «интерпретируется» браузером, чем признает, что это «интерпретируемый язык», потому что «интерпретируемый язык» подразумевает «интерпретируемый язык программирования», до предполагаемого исключения языков разметки. – ruakh

7

Bash является переводчиком согласно GNU Bash Reference Manual:

Bash является оболочкой, или интерпретатор команд языка, для операционной системы GNU.

Смежные вопросы