斜线和反斜线简要历史,为什么windows和unix采用不同的路径分隔符

斜线和反斜线简要历史,为什么windows和unix采用不同的路径分隔符

 

/ 和 \

/ 和 \,左为斜线,右为反斜;一个常用的速记法:八字,先撇为斜,后捺为反斜。

/ 和 \一般的作用是作为目录分隔符,这些符号在不同的系统下意义不同

//双斜线协议和主机名之间的分隔符
/单斜线WEB上或者UNIX环境下的目录分隔符
\反斜线windows 里的目录结构的分隔符,正斜线也可但是也有例外的时候

历史简述

1970年左右,Unix系统最先使用正斜线“/”作为目录分隔符。DOS中的大部分工具都是IBM开发的,这些命令工具经常使用“/”作为命令选项的前导,例如“dir /a”,和linux中的 “-”是类似的功能。1981年,MS-DOS1.0推出的时候,根本没有目录的概念,(所有的文件都是直接堆放在磁盘之下?),所以也就没有考虑使用何种分隔符更合适(其实那个时代也不会考虑相互兼容的问题),命令选项前导继续使用“/”。

1983年发行的MS-DOS2.0复制(wiki Backslash的解释里使用的就是copy这个词)了Unix的文件系统,同时为了保持和MS-DOS1.0的兼容,反斜线也是可以使用的。就是说,在MS-DOS2.0中,大多数情况下,二者是可以混用的,一个例外是COMMAND.COM,这个程序大家可能不太熟悉,他就是Windows NT系列的CMD.EXE的前身,CMD.EXE在不发生歧义的时候,两个符号是通用的。以后的各个版本的DOSWindows为了保持兼容性都保持了这种情况。

尽管如此,Windows上默认约定的分隔符还是“\”,返回路径的API返回的也是“\”。

其他的地方:网络资源和其他操作系统

网络上资源定位和其他的大部分操作系统都是延续Unix的约定。

网络资源定位比如HTTPFTP都是使用正斜线,这和服务器类型没有关系,因为协议是这样规定的。

LinuxUnix-like操作系统,因此延续了Unix的约定。其他的操作系统如Android, Chrome OS, Steam OS都是继承子linux,所以也是使用正斜线。

同时有两个分隔符显然是很蛋疼的事情,而且普通用户也不想去记住太多的规则。大部分的软件中,如果涉及分隔符,两个符号都是通用的,例如firefox等浏览器和windows资源浏览器,两个符号是通用的。

需要注意的地方

CMD.exe

windowscmd.exe中,不产生歧义的时候,二者通用,例如

cd ./tools

cd .\tools

是一样的。

 

看下面的例子:

.\tools\记事本.exe  ./files/text.txt

cmd例输入上面这个命令的时候,后半部分的./files/text.txt用正反斜线都可以。但是前面的.\tools\记事本.exe只能使用反斜线。因为前面的内容被当做命令来解析,用正斜线就有歧义了。

转义符号

\ 还用做转义符号。例如,当上面的命令是以字符串的方式传递给cmd执行的,就要转义了

“.\\tools\\记事本.exe  ./files/text.txt

DIRECTORY_SEPATRATOR

开发程序时,特别是web程序,常常需要考虑不同的系统(和web环境),兼容性上考虑,正斜线是都能正确识别解析的,但是有时候问题比这个要复杂,具体问题具体考虑。

大部分的开发框架都会提供一个DIRECTORY_SEPATRATOR来替程序员解决这个问题,如果有,就尽量使用它。

参考

1wiki Backslashhttp://en.wikipedia.org/wiki/Backslash

2、微软程序员Larry Osterman关于这个问题的文章Why is the DOS path character "\"? http://blogs.msdn.com/b/larryosterman/archive/2005/06/24/432386.aspx

3Why Windows Uses Backslashes and Everything Else Uses Forward Slashes

http://www.howtogeek.com/181774/why-windows-uses-backslashes-and-everything-else-uses-forward-slashes/

posted @ 2018-10-16 23:01  robotech_erx  阅读(571)  评论(0编辑  收藏  举报

本文版权归作者robotech_erx,转载请注明出处:https://www.cnblogs.com/robotech/