正斜槓“/”與反斜槓”\”


基礎知識
正斜槓,又稱左斜槓,符號是"/"。反斜槓,也稱右斜槓,符號是"\"。
記憶方法:關於這兩個的辨別記憶,可以想一想乒乓球的正手與反手打發。
補充一個圖更容易記住哪個是斜槓,哪個是反斜槓。

 使用說明
windows系統:
反斜槓“\“用來表示目錄;正斜槓“/”用來表示網址、Url地址。
“/”是表示參數,“\”是表示本地路徑。
DOS路徑:
C:\WINDOWS\SETTING   ..這是反斜槓的作用後面跟着的是文件名
C:\dir /P        ..這就是正斜槓後面是一個命令的參數,dir 是命令。
unix系統:
正斜槓“/”表示目錄。由於web遵循unix命名,所以在網址(URL)中,正斜槓“/”表示目錄。
“/”表示路徑,“\”表示轉義,“-”和“--”表示參數。
反斜線符號“ \ ”在Bash中被解釋爲轉義字符,用於去除一個單個字符的特殊意義,它保留了跟隨在之後的字符的字面值,除了換行符。如果在反斜線之後一個換行字符立即出現,轉義字符使行得以繼續,遇到命令很長時使用反斜線很有效;反斜線從輸入流中被移除並有效地忽略。
例一: ubuntu@ubuntu:~$ echo $HOME
/home/ubuntu
ubuntu@ubuntu:~$ echo \$HOME
$HOME
例子中,反斜線去除了“ $ ”字符的特殊意義,保留字面值,從而不輸出home目錄路徑。
例二:
ubuntu@ubuntu:~$ mv test.c \
> ../Downloads/
例子中,反斜線使行得以繼續,命令可以正常輸入。
例三:
到這裏就明白了怎麼查看文件名爲“ \ ”的文檔了,只要輸入命令
ubuntu@ubuntu:~$ vi \\
就可以了,前一個反斜線保留了後一個反斜線的字面意思,即作爲文件名輸入了。
記憶方法:注意window這個單詞的第一筆,也就是字母w的第一筆,是什麼?沒錯,就是反斜槓,這樣每次在想windows文件路徑中用/還是\的時候,首先要想 到windows的第一筆是什麼,答案自然就出來了。作爲windows的對立面,linux或unix文件路徑中用的自然就是/ 了。
編碼注意
C++轉義字符

在獲取文件路徑的時候 很多人喜歡用 "d:\test.txt",然後就會發生所謂的轉義字符錯誤了。原因就是因爲在此處“\test”中的“\t“轉化爲了TAB。從而導致打開文件失敗。
在代碼中,fp = fopen("D:\\D\\Dtest.log","r+");
fp = fopen("D:/D\\Dtest.log", "r+");
fp = fopen("D:D\\Dtest.log", "r+");
效果相同,都可以打開文件。
在cmd.exe中,如下:

但是,看到這我有兩個疑問:
  1. fp = fopen("D:D\\Dtest.log", "r+");
D:後面不帶路徑符號也可以嗎?爲什麼?
  1. 在CMD中,執行type D:D\test.log,
此處的“D:D\test.log”是不是作爲參數傳入的?其中的“\test”處的\t,爲什麼不是作爲轉義字符傳入,爲什麼仍然能打開文件?
相關知識
相對路徑:相對路徑就是指由這個文件所在的路徑引起的跟其它文件(或文件夾)的路徑關係。

從C:\log文件夾進入C:\Users\zhang-xch文件夾,需要輸入cd ../Users\zhang-xch
注意:相對路徑的文件夾符號是斜槓:/
絕對路徑:在www中(廣域網),以http開頭的鏈接都是絕對路徑。
物理路徑:物理路徑指的是某一臺計算機本地的路徑,以盤符開頭,例如C:\、D:\temp等等
歷史問題
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 開始轉而使用減號作爲命令行參數的起始符。
由此也可以看出Windows或者說DOS在設計初期考慮不夠 周全,爲了和Unix一些特徵區別開來,將Unix中的正斜槓"/"分隔路徑方式改變成了反斜槓"\"。這樣改變導致的一個問題就是在早期DOS命令行 中,正常的文件名是不能包含空格的,如果包含了空格,會導致輸入這樣的文件名時,命令解析無法將其和參數區分開。例如,想要進入"hutaow yuan"這個目錄(在此先忽略8.3命名規則),直接輸入"cd hutaow yuan",命令行會將其解析爲進入"hutaow"目錄,而後面的"yuan"做參數,這顯然不是所期望的。【目前在cmd中,將帶空格的文件名稱做了如下處理】

  而在Unix中,文件名如果包含空格,可以直接在空格前加上反 斜槓"\"進行轉義,從而很好的和命令參數區別出來(參數之間一般使用空格分隔)。還是上面的例子,在Unix中,只要輸入"cd hutaow\ yuan"(在yuan前面的空格前加上"\"),命令行會正確的辨認出"hutaow yuan"並進入這個目錄。
當然,現在Windows的後續版本已經使用其它方法(比如文件名用雙引號括住)解決了空格問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章