Linux下反斜杠号"\"引发的思考
来源:互联网 发布:董秘助手软件下载 编辑:程序博客网 时间:2024/06/11 00:18
Linux下反斜杠号”\”引发的思考
转自:http://www.cnblogs.com/MuyouSome/p/3426119.html
今天在检查home目录时发现有一个名为“\”的文件,觉得很奇怪,从来没见过,就准备用Vim打开看看,很自然地输入命令查看一下,结果居然打不开。
ubuntu@ubuntu:~$ vi \
ubuntu@ubuntu:~$
稍微思考了一下就明白了,不是打不开,问题出在这个文件名“ \ ”上面。
反斜线符号“ \ ”在Bash中被解释为转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符。如果在反斜线之后一个换行字符立即出现,转义字符使行得以继续,遇到命令很长时使用反斜线很有效;反斜线从输入流中被移除并有效地忽略。
例一:
ubuntu@ubuntu:~
/home/ubuntu
ubuntu@ubuntu:~
例子中,反斜线去除了“ $ ”字符的特殊意义,保留字面值,从而不输出home目录路径。
例二:
ubuntu@ubuntu:~$ mv test.c \
../Downloads/
例子中,反斜线使行得以继续,命令可以正常输入。
到这里就明白了怎么查看文件名为“ \ ”的文档了,只要输入命令
ubuntu@ubuntu:~$ vi \
就可以了,前一个反斜线保留了后一个反斜线的字面意思,即作为文件名输入了。
这个问题解决了,但是又想到了与反斜线对应的,也是经常用到一个符号:正斜线(“ / ”),再来看看这两个符号的区别。
在知乎上看到这么个说法:反斜线“\”是电脑出现了之后为了表示程序设计里的特殊含义才发明的专用标点。就是说,除了程序设计领域外,任何地方都不应该有使用反斜杠的时候,请永远使用正斜线“/”。
粗略想想还真差不多是这么回事,但是马上就想到一朵奇葩:Windows系统中用反斜线“\”来表示目录,但是Linux下用正斜线“/”来表示。估计不少人刚从Windows转到Linux下时都犯过这种错。
Windows:
“/”是表示参数,“\”是表示本地路径。
Linux和Unix:
“/”表示路径,“\”表示转义,“-”和“–”表示参数。
网络:
由于网络使用Unix标准,所以网络路径用“/”。
但是为什么Windows要用” / “,难道只是为了显示和Linux的不同吗?显然不是的,里面历史原因很复杂 ,同样在知乎找到了答案。:)
Windows 用反斜杠(“\”)的历史来自 DOS,而 DOS 的另一个传统是用斜杠(“/”)表示命令行参数,比如:
cd %SystemDrive%
dir /s /b shell32.dll
既然 DOS 这边斜杠被占用了,只好找一个最接近的。那就是它了。而在 UNIX 环境中,我们用减号(“-”)和双减号(“–”)表示命令行参数。
用斜杠表示命令行参数是兼容性原因。这个问题最初起源自 IBM。IBM 在最初加入 DOS 开发时贡献了大批工具,它们都是用斜杠处理命令行参数的。而这个传统源自于 DEC/IBM,比如当年的 VMS 就是用斜杠处理命令行参数,它的目录分隔符是美元符(“$”)。顺便说一句,这个传统也被部分地继承进了 DOS 和 Windows 体系,日文版的 Windows 就把反斜杠在屏幕上显示为“¥”,虽然实际上还是反斜杠。
如今的 Windows 内核在处理路径时确实可以同时支持斜杠和反斜杠。很多时候我们看到用斜杠时出错,是因为应用程序层面的原因。比如 cmd.exe 就不支持用斜杠表示路径,而PowerShell.exe 支持,也正因为这个原因,PowerShell 开始转而使用减号作为命令行参数的起始符。
MSDN上有一篇 blog 说得很清楚:http://blogs.msdn.com/b/larryosterman/archive/2005/06/24/432386.aspx。
- Linux下反斜杠号"\"引发的思考
- Linux下反斜杠号"\"引发的思考
- windows和linux下的斜杠号与反斜杠号
- windows和linux下的斜杠号与反斜杠号
- 一个反斜杠"\"引发的问题
- 一根反斜杠“\”引发的事件
- Silverlight Image Source URI : 一个反斜杠引发的血案
- Silverlight Image Source URI : 一个反斜杠引发的血案
- linux命令行下使用反斜杠“\”调用别名的原命令
- “反百度联盟”引发的思考(waterworms.net)
- C#:WQL查询LIKE子句中反斜杠字符引发的血案及解决之道
- Linux正则表达式-反斜杠
- 用python修改txt文本下的反斜杠
- 斜杠和反斜杠的区别
- 正斜杠与反斜杠的分析
- 正斜杠与反斜杠的分析
- 斜杠与反斜杠的区别
- 斜杠与反斜杠的用法区别
- IOS工程自动打包并发布脚本实现
- JS中的var self=this【转】
- angularjs的指令详解
- java wait()/notify() 实现生产者消费者模式
- 后台管理UI的选择
- Linux下反斜杠号"\"引发的思考
- web接口排队访问 子查询where条件字段搜索域 2016.08.17回顾
- 机器视觉自主学习规划
- 大型网站服务器的架构
- poj 2386 (Lake Counting)
- 【ArcGis】环境搭建,一次配置,终身无忧
- 图结构练习——判断给定图是否存在合法拓扑序列
- 修改于《用抛物线的点实现HTC Vive瞬移系统》,亲测可用
- 图结构练习——BFSDFS——判断可达性