Perl、Awk、Bash、PHPなどの多くのスクリプト言語は、識別子名の前に$記号を使用します。理由を調べてみましたが、満足のいく答えはありませんでした。
Perl、Awk、Bash、PHPなどの多くのスクリプト言語は、識別子名の前に$記号を使用します。理由を調べてみましたが、満足のいく答えはありませんでした。
回答:
ボーンシェルまたはその前身は、おそらくコンベンションの起源でした。シェルは$foo
、シェル変数または環境変数を参照するために使用する傾向がありますが、foo
リテラル文字列(コマンド名、ファイル名、または別のコマンドに渡される単語など)として解釈されます。
おそらく、入力しなければならない量を最小限にすることの問題でしょう。ほとんどのプログラミング言語では、入力するもののほとんどは、キーワード(小さな固定セットから)と宣言されたものの名前になります。それらの名前だけを使用するのは理にかなっています。文字列リテラルは、それらを構文的に区別するために引用符(単一または二重)で囲まれています。
対話型シェルでは、入力するもののほとんどはコマンド名とファイル名になるため、装飾されていないフォームを使用することは理にかなっています。変数名はそれほど頻繁には使用されないため、変数名を前に付けると$
簡単に区別できます。
$
一部のBASICが(数値変数ではなく)文字列変数に使用するトレーリングも、おそらくインスピレーションでした。
$
スカラー変数に使用するPerlの選択は、Bourneシェルなどのシェルに疑いなく触発されたものであり、Perlの初期バージョンはベアワードを文字列リテラルとして扱いました(print FOO
そしてprint "FOO"
同等でした)。このベアワードの使用は、Perlのより新しいバージョンでは推奨されていませんが、シギルは残り、主にさまざまな種類の変数を区別するために使用されます。おそらくPerlがゼロから設計されていた場合、スカラー変数は「空の印」で示されるかもしれませんが、それは起こりませんでした。
(ところで、Awkのはシギルを使用していないそれは持っています。$
構文は、それはフィールド番号を指します。 NF
フィールドの数であり、$NF
最後の(あるNF
番目)フィールドが。)
変数名の$記号は、"Sigil"の特殊なケースです。BASICの初期(1964年頃)には、文字列変数名を示すために$が使用されていました。私の推測では、コンパイラで変数名を記号を使用して他の文法から簡単に分離でき、BASICに共通していたため、その使用が進んだためです。ただし、使用されるのはこれだけではありません。
$
for文字列(および%
整数)は、少なくとも私が受けた(非標準の)バリアントでは、プレフィックスではなくサフィックスでした。もちろん、それは重要なことではありません-少なくともコンパイラと字句解析に関する限り、接尾辞と接頭辞はかなり表面的なものです。読みやすさの点で若干の違いがあるかもしれません。
これはBASICに由来するようで、$サフィックスは文字列変数を示し、「文字列」とも発音されます。たとえば、INKEY $は「in key string」と発音されます。
しかし、なぜドル記号なのでしょうか?さて、$は文字列のSに少し似ています。ウィキペディアによると:
ドル記号は、コンピューターの文字セットにほとんど普遍的に存在する数少ない記号の1つですが、コンピューターソフトウェア内の文字通りの意味ではほとんど必要ないため、$文字はコンピューターで使用されていますお金とは無関係の多くの目的のため。
(適切なのは、For A Few Dollars More Moreはこれを入力する際にテリーにあります。)