Linux下的正斜杠"/"和"\"的区别

原创 2015年07月09日 13:49:56

今天在检查root目录时发现有一个名为“\”的文件,觉得很奇怪,从来没见过,就准备用Vim打开看看,很自然地输入命令查看一下,结果居然打不开。


[root@localhost ~]# ll
总用量 48
-rw-r--r--. 1 root root     0  7月  9 2015 \
-rw-------. 1 root root  1414  6月 30 22:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 30147  6月 30 22:51 install.log
-rw-r--r--. 1 root root  7800  6月 30 22:50 install.log.syslog
[root@localhost ~]# vim \
> 

稍微思考了一下就明白了,不是打不开,问题出在这个文件名“ \ ”上面。

  反斜线符号“ \ ”在Bash中被解释为转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符。如果在反斜线之后一个换行字符立即出现,转义字符使行得以继续,遇到命令很长时使用反斜线很有效;反斜线从输入流中被移除并有效地忽略。

例一:

[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo \$HOME
$HOME

例子中,反斜线去除了“ $ ”字符的特殊意义,保留字面值,从而不输出home目录路径。


例二:

[root@localhost ~]# mv test.c \
> ..
mv: 无法获取"test.c" 的文件状态(stat): 没有那个文件或目录

例子中,反斜线使行得以继续,命令可以正常输入。

  到这里就明白了怎么查看文件名为“ \ ”的文档了,只要输入命令

[root@localhost ~]# vim \\

这个问题解决了,但是又想到了与反斜线对应的,也是经常用到一个符号:正斜线(“ / ”),再来看看这两个符号的区别。

  在知乎上看到这么个说法:反斜线“\”是电脑出现了之后为了表示程序设计里的特殊含义才发明的专用标点。就是说,除了程序设计领域外,任何地方都不应该有使用反斜杠的时候,请永远使用正斜线“/”。

  粗略想想还真差不多是这么回事,但是马上就想到一朵奇葩: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 说得很清楚:blogs.msdn.com/b/larryo


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Linux下反斜杠号"\"引发的思考

Linux下反斜杠号"\"引发的思考   今天在检查home目录时发现有一个名为“\”的文件,觉得很奇怪,从来没见过,就准备用Vim打开看看,很自然地输入命令查看一下,结果居然打不开...

windows和linux下的斜杠号与反斜杠号

老是混淆windows和linux的斜杠和反斜杠,做个笔记。Windows: “/”是表示参数,“\”是表示本地路径。 Linux: “/”表示路径,“\”表示转义,“-”和“–”表示参数。 ...

windows与linux中的路径书写,斜杠、反斜杠用法总结

对于路径中经常出现斜杠“/”和反斜杠“\”,很多人,包括我自己在内,经常会书写错误,尤其是同时在windows和linux两个操作系统中工作时,由于其路径写法的差异,更加剧了这种混淆的发生。 这...

Linux下反斜杠号"\"引发的思考

Linux下反斜杠号”\”引发的思考 转自:http://www.cnblogs.com/MuyouSome/p/3426119.html  今天在检查home目录时发现有一个名为“\”的文件,觉得...

linux命令行下使用反斜杠“\”调用别名的原命令

alias是shell的内置命令 可以用来设置命令的别名 如使用alias ls='ls --color=auto'设置使用ls时以彩色输出 使用alias查看当前shell设置的别名 ...

linux下"\"的作用

反斜线符号“ \ ”在Bash中被解释为转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符(\n,\r)。      如果在反斜线之后一个换行字符立即出现,转义字...

Bash中的特殊字符(上)

一.实验说明 1.登陆系统 无需登录直接进入系统 2.若不小心登出如何处理 系统用户名tc,密码为空。即提示输用户名时输入tc然后在提示输入密码时直接敲回车即可 二、# ...

linux shell脚本替换反斜杠

1) windows中的脚本,路径均是反斜杠\ , 在linux中,路径是斜杠/,需要将反斜杠替换为斜杠,使用sed命令,如下            sed -i "s:\\\:\/:g"  /hom...
  • lao_pei
  • lao_pei
  • 2016年07月11日 15:34
  • 2946

在Linux中点斜杠(./)和点空格点斜杠(. ./)执行脚本之间的区别

点斜杠执行脚本是启动了另一个Shell去执行脚本(另一个进程),所以点斜杠执行脚本时,设置的环境变量会随着进程的退出而结束,其中的环境变量设置对当前Shell不起作用。 点空格点斜杠执行脚本,是...
  • zdh9378
  • zdh9378
  • 2014年09月26日 21:33
  • 1755

Java文件路径问题小记(Windows & Linux)

关于Java文件路径在Windows和Linux中的问题~
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下的正斜杠"/"和"\"的区别
举报原因:
原因补充:

(最多只允许输入30个字)