Багато мов сценаріїв, такі як Perl, Awk, Bash, PHP тощо, використовують знак $ перед іменами ідентифікаторів. Я намагався шукати, чому, але ніколи не мав задовільної відповіді.
Багато мов сценаріїв, такі як Perl, Awk, Bash, PHP тощо, використовують знак $ перед іменами ідентифікаторів. Я намагався шукати, чому, але ніколи не мав задовільної відповіді.
Відповіді:
Шкаралупа Борна або його попередник, ймовірно, був джерелом конвенції. Оболонки, як правило, використовують $fooдля позначення змінної оболонки або змінної середовища, тоді як просто fooприймається як буквальна рядок (яка може бути ім'ям команди, ім'ям файлу або просто словом, яке передається іншій команді).
Мабуть, справа в тому, щоб мінімізувати, скільки потрібно вводити. У більшості мов програмування більшість того, що ви вводите, буде ключовими словами (з невеликого фіксованого набору) та назвами речей, які були оголошені; має сенс використовувати лише ім’я для тих. Лінійні рядки вкладаються у лапки (одинарні чи подвійні), щоб їх синтаксично розрізнити.
В інтерактивній оболонці більшість речей, які ви вводите, будуть іменами команд та іменами файлів, тому мати необмежену форму для них має сенс. Імена змінних використовуються не так часто, тому передувати їх $- це простий спосіб їх розрізнення.
Наслідком того, $що деякі BASIC використовують для рядкових змінних (на відміну від числових змінних), ймовірно, було також натхненням.
Вибір Perl використовувати $для скалярних змінних, безсумнівно, був натхненний оболонками, такими як оболонка Борна, та ранніми версіями Perl, що зазвичай розглядаються баревами як строковими буквами ( print FOOі print "FOO"були еквівалентними). У сучасних версіях Perl це використання перехідних мов було вимкнено, але сигіли залишаються і в основному використовуються для розрізнення різних типів змінних. Можливо, якби Perl розроблявся з нуля, скалярні змінні можуть бути позначені "порожнім знаком", але цього не сталося.
(BTW, Awk не використовує sigils. У нього є $синтаксис, але він посилається на номери полів. NFЦе кількість полів; $NFце останнє (це NF) поле.)
Знак $ у назві змінної - це особливий випадок "Sigil" , ще в перші дні BASIC (1964 або більше) $ використовувався для позначення імен змінних рядків. Я думаю, оскільки компіляторам полегшує відокремлення імен змінних від решти граматики, використовуючи якийсь символ, а оскільки це було загальноприйнято для BASIC, його використання прогресувало. Однак це не єдине, що використовується.
$для (і %для цілих чисел) у Basic були суфіксом, а не префіксом, принаймні у (нестандартних) варіантах, які мені завдавали. Зрозуміло, що це не так важливо - суфікс проти префікса є досить поверхневим, принаймні, що стосується компіляторів та лексичного аналізу. Можливо, є незначна різниця в частині читабельності.
Це, мабуть, бере початок у BASIC, де суфікс $ вказує на змінну рядка, а також вимовлявся як "рядок". Наприклад, INKEY $ вимовляється "у рядку ключів".
Але чому знак долара? Ну, $ виглядає трохи як S для рядка. А згідно з Вікіпедією :
Оскільки знак долара є одним з небагатьох символів, який, з одного боку, майже повсюдно присутній у комп’ютерних наборах символів, але, з іншого боку, рідко потрібен у їх буквальному значенні в межах комп'ютерного програмного забезпечення, символ $ використовується на комп'ютерах для багатьох цілей, не пов'язаних з грошима.
(Відповідно, на кілька доларів більше , ніж на телевізорі, коли я це набираю.)
Чому ні? Простіше написати лексер, який може сказати, що ідентифікатор буде змінною (і, отже, простіше написати парсер), особливо для інтерпретованої мови. Щодо того $, це, мабуть, багато в чому традиція - хтось із творців ранньої мови, що використовує конструкцію (Баш? Або, швидше за все, її попередник), використовував її з будь-якої причини і наступні мови її прийняли.