为什么$在这么多语言的标识符名称中出现?


Answers:


4

伯恩炮弹或其前身可能是公约的起源。外壳程序倾向于用来$foo指代外壳程序变量或环境变量,而只是foo将其当作文字字符串使用(可以是命令名,文件名或只是要传递给另一个命令的单词)。

这可能是最大程度地减少您必须键入的内容的问题。在大多数编程语言中,您键入的大部分内容将是关键字(来自固定的小集合)和已声明的事物的名称。为这些名称仅使用名称是有意义的。字符串文字用引号引起来(单引号或双引号),以在句法上加以区分。

在交互式外壳中,您键入的大多数内容将是命令名和文件名,因此使用未经修饰的形式很有意义。变量名的使用频率不高,因此在它们前面加$一个区分它们的简单方法。

$一些BASIC用于字符串变量(而不是数字变量)的尾迹也可能是一个启发。

Perl $用于标量变量的选择无疑是受Bourne shell之类的shell启发的,而Perl的早期版本通常将裸字视为字符串文字(print FOO并且print "FOO"是等效的)。在更现代的Perl版本中已不建议使用裸字,但是仍然保留了信号名称,并且主要用于区分不同种类的变量。也许如果Perl是从头开始设计的,则标量变量可能会用“空符号”表示,但这并没有发生。

(顺便说一句,Awk不使用sigils。它确实具有$语法,但是它引用字段编号。 NF是字段的数量;$NF是最后一个(第NFth个)字段。)



14

变量名中的$符号是“ Sigil”的特例,早在BASIC的早期(1964年左右),$用来表示字符串变量名。我的猜测是,由于它使编译器更容易使用某些符号将变量名与语法的其余部分分开,并且由于它是BASIC通用的,因此其用法得到了发展。但是,这不是唯一使用的一种。


2
Basic中的$for字符串(和%for整数)是一个后缀而不是一个前缀,至少在我遇到的(非标准)变体中。当然,那并不是很重要-后缀vs.前缀是很肤浅的,至少就编译器和词法分析而言。在可读性方面可能会略有不同。
Steve314

顺便说一句-它在Basic中工作的一个原因是类型的范围非常有限,并且没有用户定义的类型,因此只需要非常有限的信号。Perl的用法有所不同-尽管对我来说已经有很长时间了,所以我真的记不清细节了。
Steve314

@ steve314,您绝对正确,A $ = ...感谢您注意这一点。
NoChance 2011年

5

啊?

有时称为标记,通常用于将变量(和其他变量)的名称转换为值。


5

这似乎起源于BASIC,其中$后缀表示字符串变量,也被发音为“ string”。例如,INKEY $发音为“在键串中”。

但是为什么美元符号呢?嗯,$看起来有点像S。并且根据维基百科

由于美元符号是为数不多的符号之一,一方面,它几乎普遍存在于计算机字符集中,但另一方面,在计算机软件中其字面意义很少使用,因此,美元字符已在计算机上使用。用于与金钱无关的许多目的。

(适当地,当我键入此命令时,电视上的要花几美元。)


2

为什么不?编写一个词法分析器(它可以告诉标识符将成为变量)更加容易(因此,编写解析器也更加容易),尤其是对于解释型语言而言。至于为什么$,那可能很大程度上是传统的-使用该构造(Bash?或更可能是它的前身)的早期语言的创建者之一出于任何原因使用了它,后来的语言采用了该构造。


1
它可能不会使词法分析器和解析器更容易编写,但是确实消除了对保留字的需求。
TomG 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.