Обратная косая черта \ — это знак, используемый в основном в вычислительной технике и математике . Это зеркальное отражение обычного слеша / . Это относительно новый знак, впервые задокументированный в 1930-х годах. Иногда его называют hack , whack , escape (из C / UNIX ), reverse slash , slosh , downwhack , backslant , backwhack , bash , reverse slant , reverse solidus и reverse virgule . [1] [2]
По состоянию на ноябрь 2022 года [обновлять]попытки определить происхождение этого символа или его предназначение до 1960-х годов не увенчались успехом. Самая ранняя известная ссылка, найденная на сегодняшний день, — это руководство по техническому обслуживанию 1937 года от Teletype Corporation с фотографией, показывающей клавиатуру ее клавиатурного перфоратора Kleinschmidt WPE-3, использующего систему Уитстона . [3] [4] Символ назывался «диагональным ключом», [5] и ему был присвоен (нестандартный) код Морзе ▄ ▄▄▄ ▄ ▄ ▄▄▄ . [6] [a]
В июне 1960 года IBM опубликовала «Расширенный стандарт набора символов», который включает символ в позиции 0x19. [4] В сентябре 1961 года Боб Бемер (IBM) предложил комитету по стандартам X3.2 сделать [
, ]
и \
частью предлагаемого стандарта, описав обратную косую черту как «оператор обратного деления» и сославшись на его предшествующее использование Teletype в телекоммуникациях. В частности, он сказал, что \ был необходим для того, чтобы булевы операторы ALGOL ( логическая конъюнкция ) и ( логическая дизъюнкция ) могли быть составлены с использованием /\ и \/ соответственно. Комитет принял эти изменения в проекте Американского стандарта (впоследствии названного ASCII ) на своем заседании в ноябре 1961 года. [4] ∧
∨
Эти операторы использовались для минимума и максимума в ранних версиях языка программирования C, поставляемых с Unix V6 [7] и V7. [8]
Во многих языках программирования, таких как C , Perl , PHP , Python , скриптовых языках Unix и многих форматах файлов, таких как JSON , обратная косая черта используется как экранирующий символ , чтобы указать, что следующий за ним символ должен обрабатываться особым образом (если в противном случае он будет обрабатываться буквально) или буквально (если в противном случае он будет обрабатываться особым образом). Например, внутри строкового литерала C последовательность \n
создает байт новой строки вместо 'n', и последовательность \"
создает фактическую двойную кавычку вместо особого значения двойной кавычки, заканчивающей строку. Фактическая обратная косая черта создается двойной обратной косой чертой \\
.
Языки регулярных выражений использовали его таким же образом, изменяя последующие литеральные символы на метасимволы и наоборот. Например, \||b ищет либо '|', либо 'b', первая черта экранируется и ищется, вторая не экранируется и действует как "или".
За пределами строк в кавычках единственным распространенным применением обратной косой черты является игнорирование («экранирование») новой строки сразу после нее. В этом контексте это можно назвать «продолженной строкой» [9], поскольку текущая строка продолжается в следующей. Некоторое программное обеспечение заменяет обратную косую черту+новую строку пробелом. [10]
Для поддержки компьютеров, в которых отсутствовал символ обратной косой черты, был добавлен триграф C ??/
, эквивалентный обратной косой черте. Поскольку это может экранировать следующий символ, который сам может быть ?
, основным современным применением может быть обфускация кода . Поддержка триграфов в C++ была удалена в C++17 , а их поддержка в C планируется быть удалена в C23 .
В Visual Basic (и некоторых других диалектах BASIC ) обратная косая черта используется как символ оператора для обозначения целочисленного деления . [11] Это округляет до нуля.
Язык программирования ALGOL 68 использует "\" в качестве символа десятичного показателя степени . ALGOL 68 имеет выбор из 4 символов десятичного показателя степени: e, E, \ или 10. Примеры: 6.0221415e23 , 6.0221415E23 , 6.0221415\23 или 6.0221415 10 23. [ 12]
В APL \ называется Expand , когда используется для вставки заполняющих элементов в массивы, и Scan , когда используется для выполнения сокращения префикса (кумулятивной свертки).
В PHP версии 5.3 и выше обратная косая черта используется для обозначения пространства имен . [13]
В Haskell обратная косая черта используется как для введения специальных символов, так и для введения лямбда-функций (поскольку это разумное приближение в ASCII греческой буквы лямбда, λ) . [14]
MS-DOS 2.0, выпущенная в 1983 году, скопировала идею иерархической файловой системы из Unix и, таким образом, использовала (прямую) косую черту в качестве разделителя каталогов. [15] Возможно, по настоянию IBM, [16] [17] Microsoft добавила обратную косую черту, чтобы разрешить ввод путей в приглашении интерпретатора командной строки, сохранив при этом совместимость с MS-DOS 1.0 (в которой / был индикатором параметра командной строки. Ввод " DIR/W " давал "широкую" опцию команде " DIR ", поэтому требовался какой-то другой метод, если кто-то действительно хотел запустить программу с именем W внутри каталога с именем DIR ). За исключением COMMAND.COM , все остальные части операционной системы принимают оба символа в пути , но соглашение Microsoft по-прежнему использует обратную косую черту, и API , возвращающие пути, используют обратные косые черты. [18] В некоторых версиях символ опции можно изменить с / на - с помощью SWITCHAR , что позволяет COMMAND.COM сохранять / в имени команды.
Семейство операционных систем Microsoft Windows унаследовало поведение MS-DOS и поэтому по-прежнему поддерживает любой из этих символов, но отдельные программы и подсистемы Windows могут ошибочно принимать только обратную косую черту в качестве разделителя пути или неправильно интерпретировать прямую косую черту, если она используется как таковая. Некоторые программы принимают только прямую косую черту, если путь заключен в двойные кавычки . [19] Неспособность функций безопасности Microsoft распознавать косые черты неожиданного направления в локальных и интернет-путях, в то время как другие части операционной системы по-прежнему действуют на них, привела к некоторым серьезным пробелам в безопасности. Ресурсы, которые не должны быть доступны, были доступны с помощью путей, использующих определенные сочетания, такие как http://example.net/secure\private.aspx . [20] [21]
Обратная косая черта используется в системе набора текста TeX и в файлах RTF для начала тегов разметки.
В USFM [22] обратная косая черта используется для обозначения особенностей форматирования при редактировании переводов Библии .
В нотации с кареткой представляет ^\
собой управляющий символ 0x1C, разделитель файлов . [23] Это чистое совпадение, не имеющее ничего общего с его использованием в путях к файлам.
Для обозначения разницы используется символ, похожий на обратную косую черту . [24]
Обратная косая черта также иногда используется для обозначения правого смежного пространства. [25]
Особенно при описании компьютерных алгоритмов часто определяют обратную косую черту так, что a \ b эквивалентно ⌊ a / b ⌋ . [26] Это целочисленное деление, которое округляет вниз, а не к нулю.
В MATLAB и GNU Octave обратная косая черта используется для левого деления матрицы , а (прямая) косая черта — для правого деления матрицы. [27]
В японских кодировках ISO 646-JP (7-битный код на основе ASCII ), JIS X 0201 (8-битный код) и Shift JIS (многобайтовая кодировка, которая является 8-битной для ASCII), кодовая точка 0x5C, которая использовалась бы для обратной косой черты в ASCII, вместо этого отображается как знак йены ¥ . Из-за широкого использования кодовой точки 005C для представления знака йены, даже сегодня некоторые шрифты, такие как MS Mincho, отображают символ обратной косой черты как ¥, поэтому символы в кодовых точках Unicode 00A5 (¥) и 005C (\) отображаются как ¥ , когда выбраны эти шрифты. Компьютерные программы по-прежнему рассматривают 005C как обратную косую черту в этих средах, но отображают его как знак йены, вызывая путаницу, особенно в именах файлов MS-DOS. [28]
Несколько других версий ISO 646 также заменяют обратную косую черту другими символами, включая ₩ (корейский), Ö (немецкий, шведский), Ø (датский, норвежский), ç (французский) и Ñ (испанский), что приводит к аналогичным проблемам, хотя и с менее продолжительным эффектом по сравнению со знаком иены.
В 1991 году RFC 1345 предложил //
уникальную двухсимвольную мнемонику , которая могла бы использоваться в интернет-стандартах как «практический способ идентификации [этого] символа без ссылки на кодированный набор символов и его код в [этом] кодированном наборе символов». [29] Следовательно, этот стиль можно увидеть в ранних документах Internet Engineering Task Force .
Руководство пользователя содержит несколько существенных ошибок. Большинство из них вызвано изменениями в последнюю минуту для достижения большей степени совместимости с реализацией MS-DOS (PC DOS) IBM. Это включает в себя использование "\" вместо "/" в качестве разделителя пути и "/" вместо "-" в качестве символа переключателя. Для передачи пакетных файлов между машинами Microsoft рекомендует использовать "\" и "/" соответственно на рынке США. [...] Приносим извинения за любые неудобства, которые эти изменения могли причинить вашему персоналу технических публикаций.