1. 程式人生 > >Linux下的正斜槓"/"和"\"的區別

Linux下的正斜槓"/"和"\"的區別

今天在檢查root目錄時發現有一個名為“\”的檔案,覺得很奇怪,從來沒見過,就準備用Vim開啟看看,很自然地輸入命令檢視一下,結果居然打不開。

[[email protected] ~]# 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
[
[email protected]
~]# vim \ >

稍微思考了一下就明白了,不是打不開,問題出在這個檔名“ \ ”上面。

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

例一:

[[email protected] ~]# echo $HOME
/root
[[email protected] ~]# echo \$HOME
$HOME

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


例二:

[[email protected] ~]# mv test.c \
> ..
mv: 無法獲取"test.c" 的檔案狀態(stat): 沒有那個檔案或目錄

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

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

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


相關推薦

Linux"/""\"的區別

今天在檢查root目錄時發現有一個名為“\”的檔案,覺得很奇怪,從來沒見過,就準備用Vim開啟看看,很自然地輸入命令檢視一下,結果居然打不開。 [[email protected] ~]#

區別

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!                       Answer: The term “backslash” is on of the most incorrectly used terms in

C++中\\是一種轉義字元,他表示一個\,就像\n表示回車一樣。所以C++中的路徑名: D:\matcom45\doc\users\_themes\m.dat 應為: CString filename=_T("D:\\matcom45\\doc\\users\\_themes\\

Linux動態庫(.so)靜態庫(.a) 的區別 Linux動態庫(.so)靜態庫(.a) 的區別 動態庫(.so)連結靜態庫(.a)的情況總結

Linux下動態庫(.so)和靜態庫(.a) 的區別   靜態庫在程式編譯時會被連線到目的碼中,程式執行時將不再需要該靜態庫。編譯之後程式檔案大,但載入快,隔離性也好。 動態庫在程式編譯時並不會被連線到目的碼中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。多個

Unity Android 路徑

當在Unity Editor 中使用斜杆和反斜杆來表示路徑時,這兩者似乎沒有什麼區別. 但當使用C#的IO類如Path.GetFileNameWithoutExtension()在android上會使反斜杆不識別。 舉個例子,"Assets/StreamingAssets/Meterial\

Linux C語言 open() fopen() 區別

fopen() #include <stdio.h> FILE *fopen(const char *path, const char *mode); mode 指定檔案的開啟模式: r:只讀方式開啟一個文字檔案(該檔案必須存在) r+:可讀可寫方式開啟一個文字檔案(該檔

java 在windowslinux系統根據擷取拆分的問題

在windows作業系統中,檔案路徑的分隔符是:"\\ ",在linux作業系統中,檔案路徑的分隔符是:"/"。 根據路徑斜槓擷取: windows 路徑是:"\\ ",替換為"/" String filePath=filePath.replace("\\", "/

Linux的tar命令gzip命令的區別與聯絡

一、windows下最常見的壓縮檔案有兩種:* .zip   和  * .rap        而Linux下卻有很多,讓人混淆:* .tar  、* .tar.gz 、* .tgz 、* .gz 、* .Z 、* .bz2二、基礎概念 1. 打包:將一堆檔案或目錄什麼的變成

使用replaceAll()方法替換字串中的反:(\)(/)

在做專案的過程中,需要將一個字串中的反斜槓(\)全部替換成(/) 原字串:http://192.168.1.10:8080/dpan\image\***.jpg; 想替換成:http://192.16

淺析靜態庫動態庫的區別linux二者的生成使用

從程式設計的角度來講,庫檔案通常被分為靜態庫檔案和動態庫檔案,其目的在於將部分程式碼封裝在一起編譯後供自己或他人呼叫,好處在於編譯後的庫檔案看不到原始碼,可保密,同時不會因為不小心修改了函式而出問題,便於維護。但是二者之間存在一定的差異。     1.靜態庫:   &n

linux的軟連結硬連結具體操作區別

簡單的看個圖,看下它們軟連結和硬連結和block以及inode的區別 根據下面的步驟來進行實踐 一、檔案連結與複製 (hard link) 1、使用vi a建立一個檔案a 2、使用l

目錄路徑加反不加的區別

 1.(無)開頭表示當前目錄下的 2.(/)開頭的目錄表示該目錄為根目錄的一個子目錄 3.(./)開頭的目錄表示該目錄為當前目錄(當前目錄所在的目錄)的一個子目錄 4.(../)開頭的目錄表示該目錄為當前目錄的父目錄 (adsbygoogle = window.adsbygoogle

linux 利用ls grep 則表示式實現目錄檔案的分開顯示

要列出當前目錄下所有的檔名和目錄名直接使用ls命令即可。但如何只列出檔名而不列出目錄呢?查遍了ls 的幫助,也沒看到有這個現成的選項。幸好這個問題還是比較常見的,網上已經有了一些解答,但實驗之後,我發現看到的幾個連結給出的解決方法都是不完全正確的。具體如下。一、網上流傳的解

Linux/usr/local/lib /usr/lib 裡的內容有什麼區別?

有個小典故不知道題主是否知道,usr的並不是user的意思,而是unix system resrouces,這一點有助於理解/usr這個子檔案系統。/usr/bin:幾乎所有的系統可執行檔案都會安裝在這裡/usr/local/bin:則是可以存放一些系統使用者自己特定的可

Linux的hosts檔案network檔案區別

Linux下有兩種與計算機名相關的配置檔案 1、hosts檔案,路徑:/etc/hosts,此文間是在網路上使用的,用於解析計算機名稱和IP地址的對映關係,功能相當於windows下面的c:\windows\system32\drivers\etc\hosts檔案,如果想使

呼叫介面時,路徑加“/”不加的區別

一般來說,網站的請求路徑不能有一絲的差錯,不管是大小寫還是各種符號。 而今天記錄下訪問路徑當中的斜槓有什麼作用。 首先我們以深大為例:www.szu.edu.cn 而我們在瀏覽器位址列輸入: www.szu.edu.cn和www.szu.edu.cn/ 都可以訪問到

linux軟鏈接硬鏈接的區別

var oldboyedu 追加 軟鏈接文件 tin ger 相關 star 鏈接 2) 1) 如何創建:a)默認不帶參數情況下,ln命令創建的是硬鏈接,帶-s參數的ln命令創建的是軟鏈接。2) 含義:a)硬鏈接文件與源文件的inode節點號相同,而軟鏈接文件相當於wi

徹底理解區別

## 前言 鑑於在Windows(開發環境)和Linux(部署環境)之中的路徑(斜槓和反斜槓)經常會進行混淆,所以專門寫一篇筆記來進行區分。大部分是按照部落格園那位老兄的思路進行編寫,並且結合另外一些人的想法,進行了整理和排版。 ![](http://img.linzworld.cn/img/202010

linuxjdk的安裝配置

rac -s watermark img 使用 etc 文件拷貝 安裝 com 一、首先依據自己的系統位數在網上下載對應的jdk安裝包 下載地址例如以下:http://www.oracle.com/technetwork/java/javase/downloads/jd

奪命雷公狗---linux NO:27 linux的密碼管理用戶切換以及sudo的使用

意思 發現 which window 明顯 能開 操作 賬戶 修改 我們在windows下用戶名是可以設置空密碼登錄的,但是在linux 裏面必須要設置一個密碼才可以登錄,否則會失敗的。。。 在linux 下設置密碼可以使用 passwd 這個命令來進行設置。。。 但是