许多脚本语言(如Perl,Awk,Bash,PHP等)在标识符名称之前使用$符号。我试图找出原因,但从未有满意的答案。
许多脚本语言(如Perl,Awk,Bash,PHP等)在标识符名称之前使用$符号。我试图找出原因,但从未有满意的答案。
Answers:
伯恩炮弹或其前身可能是公约的起源。外壳程序倾向于用来$foo
指代外壳程序变量或环境变量,而只是foo
将其当作文字字符串使用(可以是命令名,文件名或只是要传递给另一个命令的单词)。
这可能是最大程度地减少您必须键入的内容的问题。在大多数编程语言中,您键入的大部分内容将是关键字(来自固定的小集合)和已声明的事物的名称。为这些名称仅使用名称是有意义的。字符串文字用引号引起来(单引号或双引号),以在句法上加以区分。
在交互式外壳中,您键入的大多数内容将是命令名和文件名,因此使用未经修饰的形式很有意义。变量名的使用频率不高,因此在它们前面加$
一个区分它们的简单方法。
$
一些BASIC用于字符串变量(而不是数字变量)的尾迹也可能是一个启发。
Perl $
用于标量变量的选择无疑是受Bourne shell之类的shell启发的,而Perl的早期版本通常将裸字视为字符串文字(print FOO
并且print "FOO"
是等效的)。在更现代的Perl版本中已不建议使用裸字,但是仍然保留了信号名称,并且主要用于区分不同种类的变量。也许如果Perl是从头开始设计的,则标量变量可能会用“空符号”表示,但这并没有发生。
(顺便说一句,Awk不使用sigils。它确实具有$
语法,但是它引用字段编号。 NF
是字段的数量;$NF
是最后一个(第NF
th个)字段。)
变量名中的$符号是“ Sigil”的特例,早在BASIC的早期(1964年左右),$用来表示字符串变量名。我的猜测是,由于它使编译器更容易使用某些符号将变量名与语法的其余部分分开,并且由于它是BASIC通用的,因此其用法得到了发展。但是,这不是唯一使用的一种。
$
for字符串(和%
for整数)是一个后缀而不是一个前缀,至少在我遇到的(非标准)变体中。当然,那并不是很重要-后缀vs.前缀是很肤浅的,至少就编译器和词法分析而言。在可读性方面可能会略有不同。
为什么不?编写一个词法分析器(它可以告诉标识符将成为变量)更加容易(因此,编写解析器也更加容易),尤其是对于解释型语言而言。至于为什么$
,那可能很大程度上是传统的-使用该构造(Bash?或更可能是它的前身)的早期语言的创建者之一出于任何原因使用了它,后来的语言采用了该构造。