Многие языки сценариев, такие как Perl, Awk, Bash, PHP и т. Д., Используют знак $ перед именами идентификаторов. Я пытался выяснить, почему, но так и не получил удовлетворительного ответа.
Многие языки сценариев, такие как Perl, Awk, Bash, PHP и т. Д., Используют знак $ перед именами идентификаторов. Я пытался выяснить, почему, но так и не получил удовлетворительного ответа.
Ответы:
Оболочка Борна или ее предшественник, вероятно, были источником конвенции. Оболочки, как правило, используют $foo
для ссылки на переменную оболочки или переменную окружения, тогда как просто foo
воспринимается как буквальная строка (которая может быть именем команды, именем файла или просто словом, передаваемым другой команде).
Это, вероятно, вопрос минимизации того, сколько вы должны набрать. В большинстве языков программирования большинство из того, что вы вводите, будут ключевыми словами (из небольшого фиксированного набора) и именами вещей, которые были объявлены; имеет смысл использовать только имя для тех. Строковые литералы заключены в кавычки (одинарные или двойные), чтобы различать их синтаксически.
В интерактивной оболочке большинство набираемых вами вещей будут именами команд и имен файлов, поэтому иметь недекорированную форму для них имеет смысл. Имена переменных используются не так часто, поэтому перед ними $
стоит простой способ их различить.
Продольный , $
что некоторые основы используют для строковых переменных (в отличие от числовых переменных), вероятно , вдохновения , как хорошо.
Выбор Perl для использования $
в качестве скалярных переменных, несомненно, был вдохновлен такими оболочками, как оболочка Bourne, и ранние версии Perl обычно рассматривали голые слова как строковые литералы ( print FOO
и print "FOO"
были эквивалентны). Это использование голых слов не рекомендуется в более современных версиях Perl, но сигилы остаются и в основном используются для различения различных типов переменных. Возможно, если бы Perl разрабатывался с нуля, скалярные переменные можно было бы обозначить «пустым знаком», но этого не произошло.
(Кстати, Awk не использует сигилы. У него есть $
синтаксис, но он относится к номерам полей. NF
Это число полей; $NF
это последнее ( NF
th) поле.)
Знак $ в имени переменной является частным случаем «Sigil». Еще в первые годы существования BASIC (1964 или около того) $ использовался для обозначения имен строковых переменных. Я предполагаю, что поскольку компиляторам легче отделять имена переменных от остальной части грамматики, используя некоторый символ, и, поскольку это было общим для BASIC, его использование прогрессировало. Тем не менее, это не единственный используемый.
$
Строк (и %
для целых чисел) в Basic был суффикс , а не префикс, по крайней мере , в (нестандартном) вариантах я был нанесен с. Конечно, это не так важно - суффикс и префикс довольно поверхностны, по крайней мере, с точки зрения компиляторов и лексического анализа. Там может быть небольшая разница с точки зрения читабельности.
Похоже, это происходит от BASIC, где суффикс $ указывает на строковую переменную, и также произносится как «строка». Например, INKEY $ произносится как «в ключевой строке».
Но почему знак доллара? Ну, $ выглядит как S для строки. И согласно Википедии :
Поскольку знак доллара является одним из немногих символов, который, с одной стороны, почти повсеместно присутствует в компьютерных наборах символов, но, с другой стороны, редко требуется по своему буквальному значению в компьютерном программном обеспечении, символ $ используется на компьютерах. для многих целей, не связанных с деньгами.
(Соответственно, на несколько долларов больше на телике, когда я набираю это.)
Почему нет? Проще написать лексер, который может сказать, что идентификатор будет переменной (и, следовательно, легче написать синтаксический анализатор), особенно для интерпретируемого языка. Что касается того $
, почему , это, вероятно, во многом традиция - один из создателей раннего языка, использующего конструкцию (Bash? Или, скорее, предшественник к ней), использовал его по любой причине, и последующие языки приняли его.