反斜杠“ \”转义字符实际上是什么?


13

反斜杠真正逃脱了什么?

用作转义字符。但是我总是想知道正在逃避什么,或者逃避了什么。

我知道“ \ n”指定一个新行。但是逃逸从何而来呢?为什么这样称呼它?


15
当它把我的弦拧紧时,它正在逃避我的愤怒。
乔尔·埃瑟顿

Answers:


37

反斜杠用作标记字符,以告诉编译器/解释器下一个字符具有某些特殊含义。下一个字符的含义取决于实现。例如,C风格的语言使用\ n表示换行符,使用\ t表示制表符。

“转义”一词的使用实际上意味着暂时退出解析文本,并转入另一种模式,对后一种字符进行不同的处理。


8
根据字符的不同,反斜杠可能会告诉编译器/解释器以下字符没有特殊含义。例如,当转义引号时。
Ryan Kinal

12
或逃避自我。
Malfist 2011年

12

:))

它是与转义序列Esc(转义)键相关的术语。

角色本身并不“逃避”任何其他角色。也许有人会说转义字符后面的字符(例如,您的示例中的\ n逃脱了在某些应用程序中用作普通n的命运,而被用作换行符。


3

转义序列与带外通信的概念有很多共同点:

有时也用来描述人们所说的通信中的移位字符,例如引导许多终端的控制序列的ESC或旧的5位Baudot码中的电平移位指示符。

假设您正在通过串行端口进行文件传输,并与另一端的计算机进行协商:“好的,文件来了”。由于在一般情况下所有字符都可能是有效的文件字符(如果是ASCII文件),那么您会遇到一些问题:

  • 您怎么知道流的结尾在哪里?
  • 某些方案使用ASCII NUL(零)来终止,例如某些语言中的字符串,但是在文件中不能包含该字符。在某些设置(例如文件传输)中,这是不允许的。零可能是有效字符。
  • 您可以先发送期望的文件长度,但是如果需要中止怎么办?

在整个计算历史中,各种各样的人已经实现了许多不同的方法来解决此问题。

就编程语言中的文字字符串而言,这是一个类似的问题。第一个引号说:“字符串来了-开始阅读,直到得到另一个引号为止”。当然,那么您就有了发送引号字符的问题,因此他们发明了斜杠转义序列。如果先看到一个斜杠,然后是一个引号,那么那是文字引号,而不是字符串的结尾。不幸的是,您只是吞下了蜘蛛来吃苍蝇,因为现在您无法发送原义的斜杠-引号组合。因此,您可以使用另一个斜杠来逃脱一个斜杠。因此,斜杠-斜杠表示斜杠,斜杠-引号表示引用。这使他们可以对其他不可打印或难以打印的字符使用斜杠,例如回车,换行,制表符等。


3

这是对解析上下文的一种逃避,它要求(什么是恶棍)n被解释为n而不是newline

关于它的最有趣的区别是,转义符不会像引用字符(或许多其他符号)那样转换解析上下文,而是"需要另一个"(或某些其他符号)返回到前一个上下文。他们只是稍微转移了一下,但很快又回到了路上。

但是自从xml和json出现以来,没有人再谈论解析上下文了,似乎没有人再写解析器了。一些问题不再成为主流,进入利基市场,像这样的怪异利基概念仍然存在。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.