標籤: 暫無標籤

正斜杠所屬現代詞,指的是在windows系統中通常用來分隔命令行參數,/ 表示選項等。不能作為文件名。

  正斜杠/slash

  表示除法,分隔。在windows系統中通常用來分隔命令行參數,/ 表示選項等。不能作為文件名。

  反斜杠 \backslash

  在windows系統中用來表示目錄。

  而在unix系統中,/ 表示目錄。由於web遵循unix命名,所以在網址(URL)中,/ 表示目錄。

  在Unix/Linux中,路徑的分隔採用正斜杠"/",比如"/home/hutaow";而在Windows中,路徑分隔採用反斜杠"\",比如"C:\Windows\System"。

  有時我們會看到這樣的路徑寫法,"C:\\Windows\\System",也就是用兩個反斜杠來分隔路徑,這種寫法在網路應用或編程中經常看到,事實上,上面這個路徑可以用"C:/Windows/System"來代替,不會出錯。但是如果寫成了"C:\Windows\System",那就可能會出現各種奇怪的錯誤了。

  至於上述問題出現的原因,要從字元串解析這方面來分析。

  學過編程的人都應該知道,在C裡面,輸出字元串時,如果想輸出一個換行,那就要加上'\n'這個標誌,類似的,輸出一個TAB,就加上'\t',也就是說,反斜杠("\")這個符號會把跟在它後面的字元結合起來轉義成其它字元。根據這個原理,如果想輸出雙引號('"'),就需要輸入'\"',這樣才會將包含了雙引號的字元串正確的寫入內存中。那麼如果想輸入一個反斜杠呢?很簡單,只要敲'\\'就可以了。

  看到這裡或許有些人已經看出眉目了,如果"C:\Windows\System"這個路徑字元串交給C編譯器編譯,實際寫入內存的字元串並沒有包含反斜杠"\",甚至緊跟在反斜杠後面的字母也一起被轉義成了其它的字元,再次調用的話勢必會出問題。

  字元串解析不僅僅局限於C編譯器,Java編譯器、一些配置文件的解析、Web伺服器等等,都會遇到對字元串進行解析的這個問題,由於傳統的Windows採用的是單個斜杠的路徑分隔形式,導致在對文件路徑進行解析的時候可能發生不必要的錯誤,所以就出現了用雙反斜杠"\\"分隔路徑的形式。不管解析引擎是否將反斜杠解析成轉義字元,最終在內存中得到的都是"\",結果也就不會出問題了。

  由此也可以看出Windows或者說DOS在設計初期考慮不夠周全,為了和Unix一些特徵區別開來,將Unix中的正斜杠"/"分隔路徑方式改變成了反斜杠"\"。這樣改變導致的一個問題就是在早期DOS命令行中,正常的文件名是不能包含空格的,如果包含了空格,會導致輸入這樣的文件名時,命令解析無法將其和參數區分開。例如,想要進入"hutaow yuan"這個目錄(在此先忽略8.3命名規則),直接輸入"cd hutaow yuan",命令行會將其解析為進入"hutaow"目錄,而後面的"yuan"做參數,這顯然不是所期望的。

  而在Unix中,文件名如果包含空格,可以直接在空格前加上反斜杠"\"進行轉義,從而很好的和命令參數區別出來(參數之間一般使用空格分隔)。還是上面的例子,在Unix中,只要輸入"cd hutaow\ yuan"(在yuan前面的空格前加上"\"),命令行會正確的辨認出"hutaow yuan"並進入這個目錄。

  當然,現在Windows的後續版本已經使用其它方法(比如文件名用雙引號括住)解決了空格問題。
上一篇[K Computer]    下一篇 [REXEC]

相關評論

同義詞:暫無同義詞