为何要写这篇文案呢?实质上还是源于之前一篇文案《ginx 配置指南》里面一处配置代码给我带来的小纠结:
你需要将静态网页和文件放到一个目录(例如/data/www),将照片等文件放到另一个目录(例如/data/images),而后在nginx.conf中进行配置。这需要在http模块下的server模块内新建两个location模块:
1
2
3
4
5
6
7
8
9
10
http {
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
}
看起来很好理解吧~亦能够直接把文件放到一起,直接location配置绝对路径:
1
2
3
location/ {
root F:\webapp\portal;
}
发掘问题了么?上面的代码块root路径都是以斜杠(/)分隔的,下面的代码块的root路径却是以反斜杠(\)分隔的。两种区别的方式却能一样生效,这个是为何呢?
做为路径分隔符在windows和Unix系统下的区别
在上文中的例子,不论是正斜杠还是反斜杠(\),都是做为路径分隔符存在的,因此呢咱们首要把她们做为路径分隔符,分别在windows和Unix两种区别内核的系统下进行一波测试。
windows(win7 64位系统)下:
Unix(Ubuntu 14.04.5)下:
能够看出,Unix内核系统,路径格式仅支持正斜杠(/)分隔,而windows的系统,正斜杠(/)反斜杠(\)都支持,这是个很奥妙的差别。
在查找了资料后,我才晓得导致这种差别的深层次原由。
windows的命令行(CMD应用程序)跟初期的MS-DOS操作系统的命令格式是前向兼容的。而DOS系统其实有非常多历史遗留问题。
DOS系统很大一部分参考(抄袭?)自加里·基尔代尔的更早的一款操作系统CP/M。
CP/M是数字科研机构(1991年被Novell所兼并)在1974年研发,为8位CPU(如Intel 8080、Zilog Z80等)的个人电脑(PC)所设计的操作系统。在PC市场的黎明周期,它作为被广泛应用的操作系统。可是由于在向16位CPU的转化上错失机会,在以IBM PC/AT以及IBM PC兼容机为中心的16位PC市场上惨败给Microsoft的MS-DOS,从而从市场上消失。虽然CP/M推出了为Intel 8086而设计的“CP/M 86”以及为Motorola 68000而设计的“CP/M 68k”等版本,但用户几乎不存在。
因为CP/M系统是不支持目录的,/被拿来用作命令行参数的标识符,例如说dir /a, dir /w, dir /q等等(Unix用的是”-“),因此呢,当MS-DOS系统准备支持目录时,/已被占用,只能运用\来暗示路径分隔符了。再后来,windows系统诞生之时,命令行由于要跟MS-DOS兼容,只能把DOS的特性沿用了下来,同期又给支持/做为路径分隔符,于是就造成为了此刻这种正斜杠(/)反斜杠(\)都支持做为路径分隔符的状况的显现。而Unix不存在这种历史遗留问题,从诞生之初就起始运用斜杠(/)做为路径分隔符,因此呢,两个系统在这种奇怪的地区显现了分叉。
而我当时的那段代码
1
2
3
location / {
root F:\webapp\portal;
}
中的root路径,是直接从windows系统中粘贴的路径,因此呢就会显现这种反斜杠(\)做分隔符的奇怪场景。
对了,在测试过程中还发掘了windows系统中运用/和\做分隔符的一个好玩的区别:
运用\做分隔符时,在输入二级子目录(例如\zgit\zblog)时,能够提示补全路径,输入z以后按一下tab就帮我把zblog给补全了
运用/做分隔符时,在输入二级子目录(例如\zgit\zblog)时,并不可提示补全路径,他给我提示的还是1级子目录的列表,在我输入z以后按一下tab,他帮我补了一个zgit,我输入zb,按tab无反应。这实质上基本无可用补全功能。
因此呢,仅在windows下做目录操作时,还是运用反斜杠(\)做分隔符系统支持度更强些,运用体验亦更好有些。
广义方面的区别
正斜杠(/)
正斜杠(/)是咱们平时非常多时候都会用到的斜杠,咱们经常会见到这般的写法:小明/小红/小强,你/我/他等等。这种格式在各样文案里面非常平常,暗示“或”或是“和”的意思。
浏览器中URL的层级URL标记符(//)以及路径分隔符(/)亦是由于正斜杠(/)构成,例如”https://zh.wikipedia.org/wiki/“, 能够看到里面清一色的都是正斜杠(/)。运用正斜杠(/)的原由据述是web网站最早是在Unix系统下运行的,于是沿袭了Unix的那一招数径表述方式,因此呢运用正斜杠(/)做为分隔符。
正斜杠(/)亦能够用作“除法”或“分号”的功效,例如说”100÷4”咱们在计算机上输入时,因为除号比较难输,经常就会写成”100/4”,效果是完全一致的。这种用法应该是从“分号”演化来的,毕竟”4/3”你看做“三分之四”还是看做“4除以3”,都是能够的。
连续两个正斜杠(/)可做“注释”之用,在C++/C#/Java/JavaScript/PHP等主流编程语言中基本上通用:
日期亦能够运用正斜杠(/)分隔年月日,例如”2017/11/17”,亦能够用美国标准”11/17/2017”,都暗示2017年11月17日。
最后,斜线除了以上用法,亦作为连字号的代替品。例如美国空军的飞机序号。”85-1000”是第1000架飞机在1985年制造,运用斜线”85-1001/1050”暗示首批连串50部制造的飞机。
1
2
// 在掌控台打印hello world!
console.log(hello world!)
反斜杠(\)
比起正斜杠(/)的许多用处,反斜杠(\)的用处可就少多了。倘若你还是动不动就用到反斜杠(\),证明你肯定是一个程序员。
反斜杠(\)除了能够在windows下能够做路径分隔符外,最常用的功能便是做转义字符了。许多正则表达式语言都会将它视为字面道理和元字符之前的切换。例如\n是换行,\0是空字符,它们暗示的实质上都是一个字符(char);而在有些数学软件(如MATLAB)和维基百科上,能够运用反斜线输入希腊字母。\pi会转成π,\lambda会转成λ。因为反斜杠(\)存在转义字符的功效,因此呢咱们常常在有些代码里面看到形如”C:\\Windows\\System32\\cmd.exe”的路径格式(实质上你看到的双反斜杠(\),我在markdown格式下输入了连续4个反斜杠…),并不表率实质路径是这般的,而是其中连续两个反斜杠(\)出现了“化学反应”,第1个反斜杠(\)表率对后面部分进行转义,而对反斜杠(\)的转义还是反斜杠(\),因此呢虽然连续输入两个反斜杠(\),然则实质输出时仅有一个反斜杠(\)。
另一,在某些程序语言的命令行中,例如在linux中,反斜线常被放在一行的末尾用来指示编译器忽略其后的换行符,使得下一行会被当做同一行语句。这种状况下,反斜线做为一个强制换行符,将代码拆解成“连续行”。
小结
通读完这篇文案,相信你对正斜杠(/)和反斜杠(\)的功效不会再有疑惑了。最后,我再用一张图来总结一下两者各自的功能,以供各位看官整理记忆。
TIPS
看了这么一大堆正斜杠(/)和反斜杠(\),是不是头都大了呢?不碍事,想要记忆区分正斜杠(/)反斜杠(\),能够把她们想象为笔画上的撇(丿)和捺(㇏),一撇一捺是为八,第1笔正斜,第二笔反斜(/\),这般是不是好记多了呢?
文自:拓跋的前端客栈
如触及侵权请联系咱们马上处理
· END ·
—— 面试求职 | 每日一荐 ——
梁胜博士写给程序员的话
程我的个人职业发展心路历程及对程序员职业生涯规划的意见
本文为Rancher Labs CEO兼创始人梁胜博士应InfoQ之邀,为广大程序员专门撰写的个人职业发展心路历程及对程序员职业生涯规划的意见。
梁胜博士是Rancher Labs Inc. 机构联合创始人及CEO。创立Rancher Labs之前,初期在全世界知名的他Sun Microsystems机构担任核心专家级工程师时期,梁胜博士是Java语言J2SE平台核心组件JNI(Java Native Interface )的作者,并随后领导设计和研发了Java语言最为核心的JVM(Java 虚拟机)。
......
......
(查看全文,请订阅号内对话框回复:梁)
文自:InfoQ-梁胜编辑:谢然感谢作者让咱们认识更加多!谢谢!
|