1. 程式人生 > 實用技巧 >[Windows/Linux]Linux下的正斜槓"/"和"\"的區別 [轉載]

[Windows/Linux]Linux下的正斜槓"/"和"\"的區別 [轉載]

執行某一條Linux命令時,遇到了此問題,甚為不解。[文由]

本篇屬於全文轉載自: Linux下的正斜槓"/"和""的區別 - 部落格園

》》》》

1 探究此問的起源

今天在檢查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中被解釋為轉義字元,用於去除一個單個字元的特殊意義,它保留了跟隨在之後的字元的字面值,除了換行符。
如果在反斜線之後一個換行字元立即出現,轉義字元使行得以繼續,遇到命令很長時使用反斜線很有效;反斜線從輸入流中被移除並有效地忽略。

  • 例子1
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo \$HOME
$HOME

例子中,反斜線去除了“ $ ”字元的特殊意義,保留字面值,從而不輸出home目錄路徑。

  • 例子2
[root@localhost ~]# mv test.c \
> ..
mv: 無法獲取"test.c" 的檔案狀態(stat): 沒有那個檔案或目錄

例子中,反斜線使行得以繼續,命令可以正常輸入。

到這裡就明白了,怎麼檢視檔名為\的文件了!
只要輸入命令:

[root@localhost ~]# vim \\

這個問題解決了,但是又想到了與反斜線對應的,也是經常用到一個符號:正斜線(“ / ”),再來看看這兩個符號的區別。

2 辨析: /\

在知乎上看到這麼個說法:反斜線“\”是電腦出現了之後為了表示程式設計裡的特殊含義才發明的專用標點。
就是說,除了程式設計領域外,任何地方都不應該有使用反斜槓的時候,請永遠使用正斜線“/”。

粗略想想還真差不多是這麼回事,但是馬上就想到一朵奇葩:
Windows系統中用反斜線“\”來表示目錄,但是Linux下用正斜線“/”來表示。估計不少人剛從Windows轉到Linux下時都犯過這種錯。

Windows/DOS:
      / 是表示【引數】
      \ 是表示#本地路徑#

Linux/Unix:
      -或-- 表示【引數】
      / 表示#路徑#
      \ 表示轉義

網路:
      由於網路使用Unix標準,所以網路路徑用 / 

但是為什麼Windows要用" / ",難道只是為了顯示和Linux的不同嗎?顯然不是的,裡面歷史原因很複雜 ,同樣在知乎找到了答案。

3 探究:Windows使用(正)斜槓/ 的原因

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 開始轉而使用減號作為命令列引數的起始符。