Perl, Awk, Bash, PHP, vb. Gibi birçok komut dosyası dili, tanımlayıcı adlarından önce bir $ işareti kullanır. Nedenini aramaya çalıştım ama hiçbir zaman tatmin edici bir cevap bulamadım.
Perl, Awk, Bash, PHP, vb. Gibi birçok komut dosyası dili, tanımlayıcı adlarından önce bir $ işareti kullanır. Nedenini aramaya çalıştım ama hiçbir zaman tatmin edici bir cevap bulamadım.
Yanıtlar:
Bourne kabuğu veya selefi muhtemelen sözleşmenin kaynağıydı. Kabuklar $foo
kabuk değişkenine veya ortam değişkenine atıfta bulunma eğilimindedir , ancak yalnızca foo
değişmez bir dize (bir komut adı, bir dosya adı veya yalnızca başka bir komuta iletilecek bir kelime olabilir) olarak alınır.
Muhtemelen ne kadar yazmanız gerektiğini en aza indirme meselesidir. Çoğu programlama dilinde, yazdıklarınızın çoğu anahtar kelimeler (küçük bir sabit kümeden) ve bildirilen şeylerin adları olacaktır; onlar için sadece bir isim kullanmak mantıklı. Dize değişmezleri sözdizimsel olarak ayırt etmek için tırnak işaretleri (tek veya çift) içine alınır.
Etkileşimli bir kabukta, yazdığınız şeylerin çoğu komut adları ve dosya adları olacaktır, bu nedenle onlar için dekore edilmemiş bir forma sahip olmak mantıklıdır. Değişken isimleri çok sık kullanılmaz, bu nedenle onlardan önce onları $
ayırt etmenin basit bir yoludur.
$
Bazı BASIC'lerin dize değişkenleri (sayısal değişkenlerin aksine) için kullandığı iz muhtemelen bir ilham kaynağı olmuştur.
Perl'in $
skaler değişkenler için kullanma tercihi , hiç şüphesiz Bourne kabuğu gibi kabuklardan ve Perl'in erken versiyonlarında yaygın olarak dize değişmezleri olarak işlem görmüştür ( print FOO
ve print "FOO"
eşdeğerdir). Barewordların bu kullanımı Perl'in daha modern versiyonlarında kullanımdan kaldırılmıştır, ancak işaretler kalır ve çoğunlukla farklı türde değişkenleri ayırt etmek için kullanılır . Belki de Perl sıfırdan tasarlanıyorsa, skaler değişkenler "boş bir sigil" ile gösterilebilir, ancak bu olmadı.
(BTW, Awk sigils kullanmaz. Bir $
sözdizimi vardır, ancak alan sayılarına işaret eder. Alan NF
sayısıdır; $NF
son ( NF
th) alanıdır.)
Değişken adındaki $ işareti özel bir "Sigil" örneğidir. Dize değişkeni adlarını belirtmek için BASIC (1964 ya da öylesine) 'in ilk günlerinde $ kullanılmıştır. Benim tahminim, derleyicilerin değişken isimlerini dilbilgisinin geri kalanından bir sembol kullanarak ayırmasını kolaylaştırdığı ve BASIC için yaygın olduğu için kullanımı ilerledi. Ancak, bu sadece kullanılan değil.
$
Dizeleri (ve %
tamsayılar için) Basic'te eki yerine bir önek, (standart dışı) içinde en azından ben verdirdiler edildi varyantları oldu. Tabii ki bu önemli değil - sonek ve önek oldukça yüzeysel, en azından derleyiciler ve sözlük analizi söz konusu olduğunda. Okunabilirlik açısından küçük bir fark olabilir.
awk?
Bazen sigil olarak adlandırılır , genellikle değişkenlerin (ve diğerlerinin) adlarını değerlere çevirmek için kullanılır.
Bu, $ sonekinin bir dize değişkenini gösterdiği ve aynı zamanda "dize" olarak telaffuz edildiği BASIC'ten kaynaklanıyor gibi görünüyor. Örneğin, INKEY $ "anahtar dizgide" telaffuz edilir.
Ama neden dolar işareti? $, String için S'ye biraz benziyor. Ve Wikipedia'ya göre :
Dolar işareti, bir yandan neredeyse evrensel olarak bilgisayar karakter kümelerinde bulunan birkaç simgeden biri olduğu için, diğer yandan, bilgisayar yazılımı içindeki gerçek anlamlarında nadiren ihtiyaç duyulduğu için, $ karakteri bilgisayarlarda kullanıldı parayla ilgisi olmayan birçok amaç için.
(Uygun olarak, bunu yazarken birkaç Dolar için daha fazla televizyonda.)
Neden olmasın? Özellikle yorumlanmış bir dil için, bir tanımlayıcının değişken olacağını (ve dolayısıyla ayrıştırıcıyı yazmanın daha kolay olacağını) söyleyen bir lexer yazmak daha kolaydır. Neden olarak $
, bu büyük olasılıkla büyük bir gelenek - yapıyı kullanan erken bir dilin yaratıcılarından biri (Bash? Veya daha büyük olasılıkla bir öncül) onu hangi nedenle ve onu takip eden diller için kullansaydı kullandı.