ภาษาสคริปต์จำนวนมากเช่น Perl, Awk, Bash, PHP ฯลฯ ใช้เครื่องหมาย $ ก่อนชื่อตัวระบุ ฉันพยายามค้นหาสาเหตุ แต่ไม่เคยมีคำตอบที่น่าพอใจ
ภาษาสคริปต์จำนวนมากเช่น Perl, Awk, Bash, PHP ฯลฯ ใช้เครื่องหมาย $ ก่อนชื่อตัวระบุ ฉันพยายามค้นหาสาเหตุ แต่ไม่เคยมีคำตอบที่น่าพอใจ
คำตอบ:
เชลล์เป้าหมายหรือบรรพบุรุษของมันน่าจะเป็นที่มาของอนุสัญญา $foo
เชลล์มีแนวโน้มที่จะใช้เพื่ออ้างถึงตัวแปรเชลล์หรือตัวแปรสภาพแวดล้อมในขณะที่เพิ่งfoo
ถูกใช้เป็นสตริงตัวอักษร (ซึ่งอาจเป็นชื่อคำสั่งชื่อไฟล์หรือเพียงแค่คำที่จะส่งผ่านไปยังคำสั่งอื่น)
อาจเป็นเรื่องของการลดขนาดที่คุณต้องพิมพ์ ในภาษาโปรแกรมส่วนใหญ่สิ่งที่คุณพิมพ์ส่วนใหญ่จะเป็นคำหลัก (จากชุดเล็ก ๆ คงที่) และชื่อของสิ่งต่าง ๆ ที่ประกาศไว้ มันสมเหตุสมผลที่จะใช้เพียงชื่อสำหรับผู้ สตริงตัวอักษรจะอยู่ในเครื่องหมายคำพูด (เดี่ยวหรือคู่) เพื่อแยกความแตกต่างทางไวยากรณ์
ในเชลล์แบบโต้ตอบสิ่งที่คุณพิมพ์ส่วนใหญ่จะเป็นชื่อคำสั่งและชื่อไฟล์ดังนั้นการมีรูปแบบที่ไม่ได้รับการตกแต่งจึงเหมาะสม ชื่อตัวแปรไม่ได้ถูกใช้บ่อยนักดังนั้นการนำหน้าด้วย$
จึงเป็นวิธีที่ตรงไปตรงมาเพื่อแยกความแตกต่าง
การติดตาม$
ที่ BASIC บางอันใช้สำหรับตัวแปรสตริง (ซึ่งต่างกับตัวแปรที่เป็นตัวเลข) ก็อาจเป็นแรงบันดาลใจเช่นกัน
ตัวเลือกของ Perl เพื่อใช้$
สำหรับตัวแปรสเกลาร์นั้นได้รับแรงบันดาลใจอย่างไม่ต้องสงสัยจากเชลล์เช่น Bourne shell และ Perl รุ่นแรก ๆ ที่นิยมใช้ barewords เป็นตัวอักษรสตริง ( print FOO
และprint "FOO"
เทียบเท่า) การใช้งานของ barewords นี้ได้รับการคัดค้านในรุ่นที่ทันสมัยมากขึ้นของ Perl แต่ sigils ยังคงอยู่และมีการใช้ส่วนใหญ่จะเห็นความแตกต่างที่แตกต่างกันชนิดของตัวแปร บางทีถ้า Perl ได้รับการออกแบบมาตั้งแต่เริ่มต้นตัวแปรสเกลาร์อาจถูกแทนด้วย "sigil ที่ว่างเปล่า" แต่นั่นก็ไม่ได้เกิดขึ้น
(BTW, Awk ไม่ได้ใช้ sigils มันมี$
ไวยากรณ์ แต่มันหมายถึงหมายเลขฟิลด์ NF
คือจำนวนของฟิลด์; $NF
เป็นฟิลด์สุดท้าย (the NF
th))
ชื่อตัวแปร $ sign in เป็นกรณีพิเศษของ"Sigil" , ย้อนกลับไปในวันแรก ๆ ของ BASIC (1964 หรือมากกว่านั้น) $ ถูกใช้เพื่อแสดงถึงชื่อตัวแปรสตริง ฉันเดาว่าเนื่องจากทำให้คอมไพเลอร์แยกชื่อตัวแปรจากส่วนที่เหลือของไวยากรณ์ได้ง่ายขึ้นโดยใช้สัญลักษณ์บางตัวและเนื่องจากเป็นเรื่องธรรมดาสำหรับ BASIC การใช้งานจึงมีความก้าวหน้า อย่างไรก็ตามนี่ไม่ใช่สิ่งเดียวที่ใช้
$
สำหรับสตริง (และ%
สำหรับจำนวนเต็ม) ในขั้นพื้นฐานต่อท้ายมากกว่าคำนำหน้าอย่างน้อยใน (ที่ไม่ได้มาตรฐาน) สายพันธุ์ที่ฉันถูกลือกับ ไม่ว่านั่นเป็นเรื่องสำคัญแน่นอน - คำต่อท้ายกับคำนำหน้านั้นค่อนข้างตื้น ๆ อย่างน้อยที่สุดเท่าที่คอมไพเลอร์และการวิเคราะห์คำศัพท์เกี่ยวข้อง อาจมีความแตกต่างเล็กน้อยในแง่ของการอ่าน
awk?
บางครั้งเรียกว่าsigilซึ่งใช้สำหรับการแปลชื่อของตัวแปร (และอื่น ๆ ) เป็นค่า
สิ่งนี้ดูเหมือนว่าเกิดขึ้นใน BASIC โดยที่ $ suffix จะระบุตัวแปรสตริงและยังออกเสียงเป็น "string" ตัวอย่างเช่นINKEY $ออกเสียงว่า "in key string"
แต่ทำไมเครื่องหมายดอลลาร์? $ ดูเหมือนบิตสำหรับ S และตามWikipedia :
เนื่องจากเครื่องหมายดอลลาร์เป็นหนึ่งในไม่กี่สัญลักษณ์ที่ในมือข้างหนึ่งเกือบจะปรากฏอยู่ทั่วไปในชุดอักขระคอมพิวเตอร์ แต่ในทางกลับกันไม่ค่อยต้องการความหมายตามตัวอักษรในซอฟต์แวร์คอมพิวเตอร์จึงใช้อักขระ $ บนคอมพิวเตอร์ เพื่อวัตถุประสงค์ที่ไม่เกี่ยวข้องกับเงินมากมาย
(เหมาะสมสำหรับอีกไม่กี่ดอลลาร์อยู่บนจอแก้วขณะที่ฉันพิมพ์)
ทำไมจะไม่ล่ะ? มันง่ายกว่าที่จะเขียน lexer ที่สามารถบอกตัวระบุได้ว่าจะเป็นตัวแปร (และง่ายต่อการเขียน parser) โดยเฉพาะอย่างยิ่งสำหรับภาษาที่ตีความ เป็นไปได้ว่าทำไม$
มันเป็นประเพณีส่วนใหญ่ - หนึ่งในผู้สร้างภาษายุคแรกโดยใช้โครงสร้าง (Bash หรือมีแนวโน้มมากกว่าที่บรรพบุรุษของมันใช้) ไม่ว่าด้วยเหตุผลใดและภาษาที่ตามมานำมาใช้