Viele Skriptsprachen wie Perl, Awk, Bash, PHP usw. verwenden ein $ -Zeichen vor den Bezeichnernamen. Ich habe versucht, nachzuschlagen, warum, aber ich hatte nie eine zufriedenstellende Antwort.
Viele Skriptsprachen wie Perl, Awk, Bash, PHP usw. verwenden ein $ -Zeichen vor den Bezeichnernamen. Ich habe versucht, nachzuschlagen, warum, aber ich hatte nie eine zufriedenstellende Antwort.
Antworten:
Die Bourne-Shell oder ihr Vorgänger war wahrscheinlich der Ursprung der Konvention. Shells $foo
verweisen in der Regel auf eine Shell- oder Umgebungsvariable, während sie nur foo
als Literalzeichenfolge verstanden werden (bei der es sich um einen Befehlsnamen, einen Dateinamen oder ein Wort handeln kann, das an einen anderen Befehl übergeben wird).
Es ist wahrscheinlich eine Frage der Minimierung, wie viel Sie eingeben müssen. In den meisten Programmiersprachen handelt es sich bei den meisten Eingaben um Schlüsselwörter (aus einem kleinen festen Satz) und Namen von deklarierten Elementen. Es ist sinnvoll, nur einen Namen für diese zu verwenden. Zeichenfolgenliterale werden in Anführungszeichen (einfach oder doppelt) gesetzt, um sie syntaktisch zu unterscheiden.
In einer interaktiven Shell handelt es sich bei den meisten Eingaben um Befehlsnamen und Dateinamen. Daher ist es sinnvoll, eine nicht dekorierte Form für sie zu haben. Variablennamen werden nicht so oft verwendet, daher $
ist es eine einfache Möglichkeit, sie zu unterscheiden, wenn Sie ihnen voranstellen .
Das Nachziehen $
, das einige BASICs für Zeichenfolgenvariablen (im Gegensatz zu numerischen Variablen) verwenden, war wahrscheinlich ebenfalls eine Inspiration.
Perls Wahl $
für skalare Variablen wurde zweifellos von Shells wie der Bourne-Shell und frühen Versionen von Perl inspiriert, die Barewords häufig als String-Literale behandelten ( print FOO
und print "FOO"
äquivalent waren). Diese Verwendung von Barewords wurde in neueren Versionen von Perl nicht mehr empfohlen, die Siegel bleiben jedoch erhalten und werden hauptsächlich zur Unterscheidung verschiedener Arten von Variablen verwendet. Wenn Perl von Grund auf neu entwickelt würde, könnten skalare Variablen mit einem "leeren Siegel" gekennzeichnet werden, aber das ist nicht geschehen.
(Übrigens, Awk verwendet keine Siegel. Es hat eine $
Syntax, bezieht sich aber auf Feldnummern. Ist NF
die Anzahl der Felder; $NF
ist das letzte (das NF
th) Feld.)
Ein $ -Zeichen im Variablennamen ist ein Sonderfall von "Sigil" . In den Anfängen von BASIC (1964 oder so) wurde $ verwendet, um Zeichenfolgenvariablennamen zu kennzeichnen. Meine Vermutung ist, dass es für Compiler einfacher ist, Variablennamen mit Hilfe eines Symbols vom Rest der Grammatik zu trennen, und seitdem es in BASIC üblich war, hat seine Verwendung Fortschritte gemacht. Dies ist jedoch nicht die einzige, die verwendet wird.
$
für Zeichenfolgen (und %
für Ganzzahlen) in Basic war ein Suffix und kein Präfix, zumindest in den (nicht standardmäßigen) Varianten, die mir zugefügt wurden. Natürlich nicht, dass das von Bedeutung ist - Suffix gegen Präfix ist ziemlich oberflächlich, zumindest was Compiler und lexikalische Analysen angeht. In Bezug auf die Lesbarkeit kann es zu geringfügigen Unterschieden kommen.
awk?
Wird manchmal als Siegel bezeichnet und im Allgemeinen zum Umsetzen der Namen von Variablen (und anderen) in Werte verwendet.
Dies scheint auf BASIC zurückzuführen zu sein, wobei das Suffix $ eine Zeichenfolgenvariable angibt und auch als "Zeichenfolge" ausgesprochen wurde. Beispielsweise wird INKEY $ "in Schlüsselzeichenfolge" ausgesprochen.
Aber warum das Dollarzeichen? Nun, $ sieht ein bisschen aus wie S für String. Und laut Wikipedia :
Da das Dollarzeichen eines der wenigen Symbole ist, die einerseits in Computerzeichensätzen fast überall vorkommen, andererseits aber in Computersoftware in ihrer wörtlichen Bedeutung selten benötigt werden, wurde das Zeichen $ auf Computern verwendet für viele Zwecke, die nichts mit Geld zu tun haben.
(Passenderweise ist für ein paar Dollar mehr im Fernsehen zu sehen, während ich dies tippe.)
Warum nicht? Es ist einfacher, ein Lexer zu schreiben, das angibt, dass ein Bezeichner eine Variable sein wird (und folglich einfacher, den Parser zu schreiben), insbesondere für eine interpretierte Sprache. Was den Grund angeht $
, so ist dies wahrscheinlich größtenteils Tradition - einer der Schöpfer einer frühen Sprache, die das Konstrukt verwendet (Bash? Oder wahrscheinlich ein Vorgänger davon), hat es aus irgendeinem Grund verwendet und nachfolgende Sprachen haben es übernommen.