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

ประวัติ
-------

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

การใช้งาน
---------

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

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

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

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

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

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

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

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

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

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

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

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

ในรหัสอักขระภาษาญี่ปุ่น ISO 646 (รหัส 7 บิต ที่ปรับมาจาก ASCII) JIS X 0201 (รหัส 8 บิต) และ Shift JIS (รหัสหลายไบต์ที่เป็น 8 บิตสำหรับ ASCII) ตำแหน่ง 0x5C ที่ใช้เป็นแบ็กสแลชใน ASCII กลับใช้แทนเครื่องหมายเยน (¥) ส่วนในรหัสอักขระภาษาเกาหลี ใช้เป็นเครื่องหมายวอน (₩) แต่โปรแกรมคอมพิวเตอร์จะยังคงมองรหัสนี้ว่าเป็นแบ็กสแลช ทำให้เกิดความสับสนในการทำงาน โดยเฉพาะในชื่อไฟล์ Ms-DOS เนื่องจากการใช้รหัสสำหรับแบ็กสแลชในการแทนเครื่องหมายเยน ในปัจจุบันฟอนต์ยูนิโคดบางฟอนต์เช่น 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.