|In Unicode||U+005C \ REVERSE SOLIDUS (HTML |
The backslash ⟨\⟩ is a typographical mark used mainly in computing and is the mirror image of the common slash ⟨/⟩. It is sometimes called a hack, whack, escape (from C/UNIX), reverse slash, slosh, downwhack, backslant, backwhack, bash, reverse slant, and reversed virgule. In Unicode and ASCII it is encoded at U+005C \ REVERSE SOLIDUS (92decimal).
Bob Bemer introduced the \ character into ASCII on September 18, 1961, as the result of character frequency studies. In particular, the \ was introduced so that the ALGOL boolean operators
∧ (and) and
∨ (or) could be composed in ASCII as /\ and \/ respectively. Both these operators were included in early versions of the C programming language supplied with Unix V6, Unix V7 and more recently BSD 2.11.
In many programming languages such as C, Perl, PHP, Python, Unix scripting languages, and many file formats such as JSON, the backslash is used as an escape character, to indicate that the character following it should be treated specially (if it would otherwise be treated normally), or normally (if it would otherwise be treated specially). For instance, inside a C string literal the sequence
\n produces a newline byte instead of an 'n', and the sequence
\" produces an actual double quote rather than the special meaning of the double quote ending the string. An actual backslash is produced by a double backslash
Regular expression languages used it the same way, changing subsequent literal characters into metacharacters and vice versa. For instance \||b searches for either '|' or 'b', the first bar is escaped and searched for, the second is not escaped and acts as an "or".
Outside quoted strings, the only common use of backslash is to ignore ("escape") a newline immediately after it. In this context it may be called a "continuation" as the current line continues into the next one.
To support computers that lacked the backslash character, the C trigraph
??/ was added, which is equivalent to a backslash. Since this can escape the next character, which may itself be a
?, the primary modern use may be for code obfuscation. Support for trigraphs was removed in C++17.
The ALGOL 68 programming language uses the "\" as its Decimal Exponent Symbol. ALGOL 68 has the choice of 4 Decimal Exponent Symbols: e, E, \, or 10. Examples: 6.0221415e23, 6.0221415E23, 6.0221415\23 or 6.02214151023.
In APL \ is called Expand when used to insert fill elements into arrays, and Scan when used to produce prefix reduction (cumulative fold).
MS-DOS 2.0, released 1983, copied the hierarchical file system from Unix and thus used the (forward) slash but (possibly on the insistence of IBM) added the backslash to allow paths to be typed at the command line interpreter's prompt while retaining compatibility with MS-DOS 1.0 where the slash was the command-line option indicator (typing "DIR/W" gave the "wide" option to the "DIR" command, so some other method was needed if you actually wanted to run a program called W inside a directory called DIR). Except for COMMAND.COM, all other parts of the operating system accept both characters in a path, but the Microsoft convention remains to use a backslash, and APIs that return paths use backslashes. In some versions, the option character can be changed from / to - via SWITCHAR, which allows COMMAND.COM to preserve / in the command name.
The Microsoft Windows family of operating systems inherited the MS-DOS behavior and so still support either character – but individual Windows programs and sub-systems may, wrongly, only accept the backslash as a path delimiter, or may misinterpret a forward slash if it is used as such. Some programs will only accept forward slashes if the path is placed in double-quotes. The failure of Microsoft's security features to recognize unexpected-direction slashes in local and Internet paths, while other parts of the operating system still act upon them, has led to some serious lapses in security. Resources that should not be available have been accessed with paths using particular mixes, such as http://example.net/secure\private.aspx.
Especially when describing computer algorithms, it is common to define backslash so that a\b is equivalent to ⌊a/b⌋. This is integer division that rounds down, not towards zero. In Wolfram Mathematica the backslash is used this way for integer divide.
Confusion with ¥ and other characters
In the Japanese encodings ISO 646 (a 7-bit code based on ASCII), JIS X 0201 (an 8-bit code), and Shift JIS (a multi-byte encoding which is 8-bit for ASCII), the code point 0x5C that would be used for backslash in ASCII is instead rendered as a yen sign ⟨¥⟩. Due to extensive use of the backslash code point to represent the yen sign, even today some fonts such as MS Mincho render the backslash character as a ¥, so the characters at Unicode code points 00A5 (¥) and 005C (\) both render as ���¥⟩ when these fonts are selected. Several other ISO 646 versions also replace backslash with characters like the U+20A9 ₩ WON SIGN (Korean), U+00D6 Ö LATIN CAPITAL O WITH DIAERESIS (German, Swedish), U+00D8 Ø LATIN CAPITAL O WITH STROKE, (Danish, Norwegian), U+00E7 ç LATIN SMALL LETTER C WITH CEDILLA (French) and U+00D1 Ñ LATIN CAPITAL LETTER N WITH TILDE (Spanish), leading to similar problems. Computer programs still treat 005C as a backslash in these environments but display it as a yen sign, causing confusion, especially in MS-DOS filenames.
RFC 1345 suggests
// as a unique two-character mnemonic that may be used in internet standards as "a practical way of identifying [this] character, without reference to a coded character set and its code in [that] coded character set".
- Macquarie Dictionary (3rd edition)
- Raymond, Eric S. "ASCII".
- "Mini-Biography of Bob Bemer". Thocp.net. Retrieved 2013-06-16.
- "How ASCII Got Its Backslash" Archived 2013-01-19 at the Wayback Machine, Bob Bemer
- Bob Bemer (2002-07-07). "The Great Curly Brace Trace Chase". Computer History Vignettes. Bob Bemer. Archived from the original on 2009-06-04. Retrieved 2009-10-11.
- "3.1.1 Splitting long lines". GNU make manual. Retrieved July 28, 2019.
- "Arithmetic Operators in Visual Basic". Visual Basic Language Features: Operators and Expressions. MSDN. Retrieved 7 October 2012.
- "Revised Report on the Algorithmic Language Algol 68". Acta Informatica. 5 (1–3): 1–236. September 1973. doi:10.1007/BF00265077.
- "Namespaces overview".
- O'Sullivan, Stewart, and Goerzen, Real World Haskell, ch. 4: anonymous (lambda) functions, p.99
- "Why is the DOS path character "\"?". Blogs.msdn.com. 2005-06-24. Retrieved 2013-06-16.
- Necasek, Michal (24 May 2019). "Why Does Windows Really Use Backslash as Path Separator?". OS/2 Museum. Archived from the original on 24 May 2019. Retrieved 28 May 2019.
- "Path.GetFullPath Method". .NET Framework Class Library. Microsoft. Archived from the original on 21 December 2008. Retrieved 2009-01-02.
- "When did Windows start accepting forward slash as a path separator?". Bytes.com. Archived from the original on 6 February 2009. Retrieved 2009-01-02.
- Kaplan, Simone (2004). "Microsoft Probes Flaw in ASP.NET". DevSource, sponsored by Microsoft. Ziff Davis Enterprise Holdings Inc. Archived from the original on 2013-01-21. Retrieved 2009-06-14.
- Burnett, Mark (2004). "Security Holes That Run Deep". SecurityFocus. Retrieved 2009-06-14.
- "USFM – Unified Standard Format Markers". paratext.org.
- "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.
- "Definition:Coset Space". ProofWiki. Retrieved 1 February 2017.
- https://mathworld.wolfram.com/IntegerDivision.html. Missing or empty
- 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. Retrieved 7 October 2012.
- "When is a backslash not a backslash?". Blogs.msdn.com. Retrieved 2013-06-16.
- "RFC 1345". Tools.ietf.org. 1991-12-26. Retrieved 2013-06-16.