แบ็กสแลช (\) (อังกฤษ: backslash) เป็นเครื่องหมายการพิมพ์ที่ใช้มากในคอมพิวเตอร์ ลักษณะเป็นภาพสะท้อน ของเครื่องหมายทับ(หรือแสลช)ธรรมดา (/) เครื่องหมายนี้อยู่ที่ U+005C \ reverse solidus (92decimal) ในยูนิโคดและแอสกี

\ \
แบ็กสแลช
วรรคตอน
อะพอสทรอฟี   '
วงเล็บ [ ]  ( )  { }  ⟨ ⟩
ทวิภาค :
จุลภาค ,  ،  
จุดไข่ปลา   ...  . . .      
อัศเจรีย์  !
มหัพภาค .
กิลเลอเมต ‹ ›  « »
ยัติภังค์ -
ยัติภาค   
ปรัศนี  ?
อัญประกาศ ‘ ’  “ ”  ' '  " "
อัฒภาค ;
ทับ /    
ตัวแบ่งคำ
อินเตอร์พังก์ ·
เว้นวรรค     
การพิมพ์ทั่วไป
แอมเพอร์แซนด์ &
ดอกจัน *
แอต @
แบ็กสแลช \
เบสิสพอยต์
บุลเลต
แคเรต ^
แดกเกอร์ † ‡ ⹋
องศา °
บุพสัญญา ” 〃
ดับเบิลไฮเฟน = ⸗
อัศเจรีย์กลับหัว ¡
ปรัศนีกลับหัว ¿
เครื่องหมายอ้างอิง
เครื่องหมายคูณ ×
นัมเบอร์, แฮชแท็ก #
นูเมอโร
ออเบอลุส ÷
ตัวบอกลำดับ º ª
สัญลักษณ์ร้อยละ (เปอร์เซ็นต์)  %
สัญลักษณ์พันละ (เปอร์มิลล์)
พิลโครว์
บวกและลบ + −
บวกหรือลบ ± ∓
ไพรม์     
เซกชัน §
ทิลเดอ, ตัวหนอน ~
อันเดอร์สกอร์ _
เส้นตั้ง |    ¦
ทรัพย์สินทางปัญญา
ลิขสิทธิ์ ©
กอปปีเลฟต์ 🄯
ลิขสิทธิ์การอัดเสียง
เครื่องหมายการค้าจดทะเบียน ®
เซอร์วิสมาร์ก
เครื่องหมายการค้า
สกุลเงิน
เครื่องหมายสัญลักษณ์สกุลเงิน ¤

؋฿¢$֏ƒ£元 圆 圓 ¥

การพิมพ์เฉพาะทาง
แอสเทอริซึม
ฟลอวรอน
ดัชนี
อินเทอร์รอแบง
วรรคตอนไอเรอนี
ลอซินจ์
ไท
ที่เกี่ยวข้อง
ในภาษาอื่น ๆ
ในภาษาไทย
โคมูตร
ตีนครุ
ไปยาลน้อย
ไปยาลใหญ่ ฯลฯ
ฟองมัน
ไม้ยมก
อังคั่น , ฯะ, , ๚ะ

ประวัติ

แก้

บ็อบ เบเมอร์ ได้เพิ่มอักขระ \ ลงใน ASCII [1] ในวันที่ 18 กันยายน 1961, [2] โดยมีสาเหตุจากการศึกษาความถี่ของตัวอักษร การเพิ่มเครื่องหมาย \ มีจุดประสงค์โดยเฉพาะให้ตัวดำเนินการบูลีน ALGOL ∧ (และ) กับ ∨ (หรือ) สามารถประกอบจากสัญลักษณ์ที่มีใน ASCII เป็น /\ กับ \/ ตามลำดับ [3][4] ตัวดำเนินการทั้งสองนี้รวมอยู่ในภาษาซีรุ่นแรกที่มาพร้อมกับรับบปฏิบัติการ Unix V6 Unix V7 และปัจจุบัน BSD 2.11

การใช้งาน

แก้

ในภาษาโปรแกรมหลายภาษา เช่น ซี เพิร์ล พีเอชพี ไพทอน และในภาษาสคริปต์ยูนิกซ์ ใช้แบ็กสแลชเป็นอักขระหลีก (escape character) เพื่อระบุว่าให้ปฎิบัติกับอักขระที่ตามมาเป็นพิเศษ (ถ้าปกติอักขระตัวนั้นไม่มีความหมายพิเศษ) หรือเป็นปกติ (ถ้าอักขระตัวนั้นมีความหมายพิเศ) ตัวอย่างเช่นภายในสตริงภาษาซี ลำดับ\n จะให้ค่าเป็นอักขระขึ้นบรรทัดใหม่ แทนที่จะเป็นตัวอักษร 'n' ตรง ๆ และลำดับ \" หมายถึงเครื่องหมายคำพูดคู่ตรง ๆ แทนที่จะเป็นความหมายพิเศษของเครื่องหมายคำพูดคู่ซึ่งใช้ลงท้ายสตริง ในทำนองเดียวกัน ภาษาของนิพจน์ปรกติ (regular expression) ต่าง ๆ ใช้เครื่องหมายนี้เปลี่ยนระหว่างอักขระตามตัวอักษรกับอักขระควบคุม (metacharacter) จากลักษณะการใช้งานนี้ ลำดับแบ็กสแลชคู่ \\ จะหมายถึงอักขระแบ็กสแลชตามตัวอักษรปกติ

นอกเหนือจากในสตริง การใช้งาน \ โดยทั่วไป มีแค่การใช้ลงท้ายบรรทัดเพื่อระบุให้ละเว้นอักขระขึ้นบรรทัดใหม่ที่ต่อท้าย ดังนั้นบรรทัดถัดจากนั้นจะถูกปฏิบัติเสมือนว่าเป็นส่วนหนึ่งของบรรทัดเดิม ในบริบทนี้อาจเรียกว่า "ความต่อเนื่อง" [5]

ภาษาโปรแกรม ALGOL 68 ใช้ "\" เป็น สัญลักษณ์เลขชี้กำลังฐานสิบ โดยมีตัวเลือก 4 แบบ: e, E, \, หรือ 10 ตัวอย่าง: 6.0221415e23 6.0221415E23 , 6.0221415\23 หรือ 6.02214151023 [6]

ในภาษา APL \ เรียกว่า Expand เมื่อใช้เพื่อแทรก fill element ลงในอาร์เรย์และ Scan เมื่อใช้ทำ prefix reduction (cumulative fold)

แบ็กสแลชใช้ในระบบ TeX และในไฟล์ RTF เพื่อเริ่มแท็กมาร์กอัป ในภาษาแฮสเกลล์ ใช้แบ็กสแลชในการระบุทั้งอักขระพิเศษและฟังก์ชันแลมบ์ดา (เนื่องจากเป็นสัญลักษณ์ ASCII ที่คล้ายกลับ อักษรแลมบ์ดา λ) [7]

MS-DOS 2.0 ซึ่งเปิดตัว ค.ศ. 1983 คัดลอกระบบไฟล์แบบลำดับชั้นมาจากยูนิกซ์ จึงใช้ เครื่องหมายทับ(ไปข้างหน้า)[8] แต่ได้เพิ่มแบ็กสแลช (อาจมาจากการเสนอของ IBM[9]) สำหรับการพิมพ์พาธในพรอมต์ของอินเทอร์พรีเตอร์บรรทัดคำสั่ง ในขณะที่ยังคงรักษาความเข้ากันได้กับ MS-DOS 1.0 โดยที่เครื่องหมายทับเป็นตัวบ่งชี้ตัวเลือกบรรทัดคำสั่ง (เช่น การพิมพ์ "DIR/W" จะระบุตัวเลือก "wide" ให้คำสั่ง "DIR" ดังนั้นจะต้องใช้วิธีอื่นในการเรียกใช้โปรแกรมที่เรียกว่า W ภายในไดเรกทอรีที่เรียกว่า DIR) นอกเหนือจาก COMMAND.COM ส่วนอื่น ๆ ทั้งหมดของระบบปฏิบัติการ ยอมรับทั้งสองตัวอักษรในการระบุพาธ แต่ระเบียบปกติของไมโครซอฟต์ ยังคงใช้แบ็กสแลชและ API ที่ย้อนกลับเส้นทาง ใช้แบ็กสแลช[10] ในบางรุ่น อักขระตัวเลือกสามารถเปลี่ยนจาก / เป็น - ผ่าน SWITCHAR ซึ่งอนุญาตให้ COMMAND.COM รักษาการใช้ / ในชื่อคำสั่ง

ตระกูลระบบปฏิบัติการ ไมโครซอฟท์ วินโดวส์ สืบทอดการทำงานจาก MS-DOS และยังคงรองรับอักขระทั้งสองแบบ แต่โปรแกรมและระบบย่อยแต่ละตัวของวินโดวส์ อาจผิดพลาดและยอมรับตัวคั่นพาธ เฉพาะแบ็กสแลช หรืออาจตีความเครื่องหมายทับธรรมดาผิดเมื่อใช้ในลักษณะนี้ บางโปรแกรมจะยอมรับเครื่องหมายทับเท่านั้นหากพาธอยู่ในเครื่องหมายคำพูดคู่[11] ความล้มเหลวของระบบรักษาความปลอดภัยของไมโครซอฟต์ในการรับรู้ถึงทิศทางที่ไม่คาดคิดในพาธท้องถิ่นและบนอินเทอร์เน็ตในขณะที่ส่วนอื่น ๆ ของระบบปฏิบัติการยังคงปฏิบัติหน้าที่อยู่นั้น เคยนำไปสู่ปัญหาทางความปลอดภัยที่ร้ายแรง โดยแหล่งข้อมูลที่ไม่ควรเข้าถึงได้ อาจเข้าถึงผ่านด้วยเส้นทางที่ใช้สูตรเฉพาะเช่น http://example.net/secure\private.aspx [12] [13]

ในวิชาคณิตศาสตร์ ใช้เครื่องหมายเหมือนแบ็กสแลชแสดงส่วนเติมเต็ม[14] และบางครั้งใช้เพื่อแสดงถึงปริภูมิคอเซตขวา (right coset space)[15]

ในภาษาโปรแกรม BASIC บางแบบ ใช้แบ็กสแลชเป็นสัญลักษณ์ของตัวดำเนินการการ หารแบบเลขจำนวนเต็ม (integer division)[16]

ใน MATLAB และ GNU Octave เครื่องหมายแบ็กสแลชใช้แสดงการหารเมทริกซ์ทางซ้ายในขณะที่เครื่องหมายทับใช้สำหรับการหารเมทริกซ์ทางขวา[17]

ใน PHP เวอร์ชัน 5.3 ขึ้นไปจะใช้แบ็กสแลชเพื่อระบุเนมสเปซ

ความสับสนในการใช้งาน

แก้

ในรหัสอักขระภาษาญี่ปุ่น ISO 646 (รหัส 7 บิต ที่ปรับมาจาก ASCII) JIS X 0201 (รหัส 8 บิต) และ Shift JIS (รหัสหลายไบต์ที่เป็น 8 บิตสำหรับ ASCII) ตำแหน่ง 0x5C ที่ใช้เป็นแบ็กสแลชใน ASCII กลับใช้แทนเครื่องหมายเยน (¥) ส่วนในรหัสอักขระภาษาเกาหลี ใช้เป็นเครื่องหมายวอน (₩) แต่โปรแกรมคอมพิวเตอร์จะยังคงมองรหัสนี้ว่าเป็นแบ็กสแลช ทำให้เกิดความสับสนในการทำงาน โดยเฉพาะในชื่อไฟล์ Ms-DOS[18] เนื่องจากการใช้รหัสสำหรับแบ็กสแลชในการแทนเครื่องหมายเยน ในปัจจุบันฟอนต์ยูนิโคดบางฟอนต์เช่น MS Mincho ก็จะแสดงเครื่องหมายแบ็กสแลชเป็น ¥ ทำให้อักขระที่ตำแหน่ง 00A5 กับ 005C หน้าตาเหมือนกัน นอกจากนี้ ISO 646 เวอร์ชันอื่น ๆ ก็มีการแทนที่แบ็กสแลชด้วยอักขระอื่น ๆ เช่น Ö (เยอรมัน, สวีเดน) Ø (เดนมาร์ก, นอร์เวย์) ç (ฝรั่งเศส) และ Ñ (สเปน) ซึ่งนำไปสู่ปัญหาทำนองเดียวกัน

อ้างอิง

แก้
  1. "Mini-Biography of Bob Bemer". Thocp.net. สืบค้นเมื่อ 2013-06-16.
  2. "How ASCII Got Its Backslash" เก็บถาวร 2014-07-11 ที่ เวย์แบ็กแมชชีน, Bob Bemer
  3. "How ASCII Got Its Backslash" เก็บถาวร 2014-07-11 ที่ เวย์แบ็กแมชชีน, Bob Bemer
  4. Bob Bemer (2002-07-07). "The Great Curly Brace Trace Chase". Computer History Vignettes. Bob Bemer. คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2009-06-04. สืบค้นเมื่อ 2009-10-11.
  5. "GNU 'make' manual". Gnu.org. สืบค้นเมื่อ 2013-06-16.
  6. "Revised Report on the Algorithmic Language Algol 68". September 1973. สืบค้นเมื่อ April 30, 2007.[ลิงก์เสีย]
  7. O'Sullivan, Stewart, and Goerzen, Real World Haskell, ch. 4: anonymous (lambda) functions, p.99
  8. "Why is the DOS path character "\"?". Blogs.msdn.com. 2005-06-24. สืบค้นเมื่อ 2013-06-16.
  9. Necasek, Michal (24 พฤษภาคม 2019). "Why Does Windows Really Use Backslash as Path Separator?". OS/2 Museum. คลังข้อมูลเก่าเก็บจากแหล่งเดิม (html)เมื่อ 24 พฤษภาคม 2019. สืบค้นเมื่อ 28 พฤษภาคม 2019.
  10. "Path.GetFullPath Method". .NET Framework Class Library. Microsoft. เก็บจากแหล่งเดิมเมื่อ 21 December 2008. สืบค้นเมื่อ 2009-01-02.
  11. "When did Windows start accepting forward slash as a path separator?". Bytes.com. เก็บจากแหล่งเดิมเมื่อ 6 February 2009. สืบค้นเมื่อ 2009-01-02.
  12. Kaplan, Simone (2004). "Microsoft Probes Flaw in ASP.NET". DevSource, sponsored by Microsoft. Ziff Davis Enterprise Holdings Inc. คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2013-01-21. สืบค้นเมื่อ 2009-06-14.
  13. Burnett, Mark (2004). "Security Holes That Run Deep". SecurityFocus. คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2021-02-02. สืบค้นเมื่อ 2009-06-14.
  14. "Quantities and units – Part 2: Mathematical signs and symbols to be used in the natural sciences and technology". ISO 80000-2:2009. International Organization for Standardization.
  15. "Definition:Coset Space". ProofWiki. สืบค้นเมื่อ 1 February 2017.
  16. "Arithmetic Operators in Visual Basic". Visual Basic Language Features: Operators and Expressions. MSDN. สืบค้นเมื่อ 7 October 2012.
  17. Eaton, John W.; David Bateman; Søren Hauberg (February 2011). "GNU Octave: A high-level interactive language for numerical computations" (PDF). Free Software Foundation. p. 145. สืบค้นเมื่อ 7 October 2012.
  18. "When is a backslash not a backslash?". Blogs.msdn.com. สืบค้นเมื่อ 2013-06-16.