为什么Windows环境变量名使用特殊的转义字符?

为什么Windows环境变量名使用特殊的转义字符?,windows,history,environment-variables,Windows,History,Environment Variables,我很好奇为什么在Windows环境变量名中使用^字符转义特殊字符、、&和^而不是通常用于转义特殊字符的\字符,这背后是否有任何历史 请注意,我意识到这可能没有原因,但我很想知道是否有原因。'\'是Unix系统上通常用于转义特殊字符的字符(或C语言,或任何受C启发的语言)。这很方便,因为它或多或少是这些系统/语言中该字符的唯一用途 另一方面,Windows来自CP/M传统,它使用“\”作为路径分隔符。(Edit:不太正确,请参见下面的注释。)每次出现时必须转义路径分隔符会有点尴尬,我猜(!!)这就

我很好奇为什么在Windows环境变量名中使用
^
字符转义特殊字符
&
^
而不是通常用于转义特殊字符的
\
字符,这背后是否有任何历史


请注意,我意识到这可能没有原因,但我很想知道是否有原因。

'\'是Unix系统上通常用于转义特殊字符的字符(或C语言,或任何受C启发的语言)。这很方便,因为它或多或少是这些系统/语言中该字符的唯一用途


另一方面,Windows来自CP/M传统,它使用“\”作为路径分隔符。(Edit:不太正确,请参见下面的注释。)每次出现时必须转义路径分隔符会有点尴尬,我猜(!!)这就是他们选择不同转义字符的原因。

CP/M没有目录,因此没有出现使用什么作为路径分隔符的问题。它使用“/”作为命令行选项,MS-DOS1.0也是如此。当MS-DOS 2.0添加了对目录树的支持时,向后兼容性限制阻止了使用“/”作为路径分隔符,因此它选择了“\”。从那以后,我们一直在遭受痛苦。特别是如果你碰巧不是美国人,在这种情况下,你必须使用
shift
altgr
来键入
//code>和``,或者,当keymap设置不正确时(例如在某些Linux救援控制台中),您就不能这样做。当你输入一些键盘上根本不存在的字符时,这是一件非常有趣的事情。