Linux 中引號的那些事

發表於2012-07-18

我們將把編寫指令碼的事情暫時擱在一邊,然後來討論一些,我們一直在用的,但是沒有解釋的東西。引號在這一節裡面,我們會講述引號。引號有兩個作用:

  1. 控制字元替換 和
  2. 執行將單詞包含在一起的功能

我們已經使用過引號。在我們的指令碼里面,將文字資訊賦值給常量的賦值操作就使用了引號:

在上面這個例子中,文字資訊是被雙引號包括住的。我們使用雙引號的原因是—我們要把所有單詞包括住,當作一個整體來對待。如果我們沒有使用引號,那麼bash直譯器,就會將所有位於第一個單詞後面的單詞,解釋為其他的命令(第一個單詞被解釋為命令)。

嘗試一下執行下面的命令,看看有什麼效果出來:

單引號和雙引號

shell直譯器可以識別雙引號和單引號。 下面的複製表示式效果是等價的:

然而,在雙引號和單引號之間存在一個重要的差別。 單引號,在字元替換方面有限制。 正如我們在上一節所看到的內容一樣,你可以將一個變數放在雙引號裡面,而shell直譯器依然會對變數執行字元替換的操作。

我們可以通過使用echo命令來檢視這種效果:

如果我們將上述的雙引號改為單引號,那麼,行為將會改變:

雙引號並沒有限制—以”$”開頭的變數的字元替換,不過,它的確對萬用字元的擴充套件效果進行了限制。比如,下面這個例子:

引用單個字元

還有另外一種引用字元你會碰到的。 它就是反斜槓。The backslash tells 反斜槓告訴shell直譯器忽略反斜槓符後面的第一個字元。比如:

通過使用反斜槓符,shell直譯器忽略了對”$”符號進行解釋。既然shell已經忽略了”$”,那麼,shell直譯器也就不會對$HOSTNAME執行字元替換了。 下面,給出一個更有用例子:

正如你所看到的,通過使用反斜槓符號,我們可以將雙引號包含在文字里面。

反斜槓的其他使用技巧

如果,你閱讀過任何軟體的使用手冊,並且這手冊是由GNU專案完成的,那麼,你會發現,在軟體的命令選項中,除了以一個下劃線_加一個字母的形式出現之外,還有,以兩個下劃線加一個完整的單詞的形式出現。例如,下面兩個語句是等價的:

為什麼在軟體中,這兩種形式都是支援的呢?短的那種形式,是專門為那些懶的輸入員而設定的,而長的那種形式,是專門為寫指令碼而存在的。我有時候,是混合著使用上面的兩種形式,然後,我發現採用長的命令選項有用,如果,我寫了一個指令碼,並且,我將在幾個月後去閱讀它。看到長的命令選項,有助於我理解這個命令選項是什麼意思,從而省卻我去查man手冊的功夫。現在多敲幾下鍵盤,會以後節省很多功夫。 這樣,懶惰的原則就保持住了。

你有可能會疑慮,使用長的命令形式,會導致一個單獨的命令變得很長。 為了與這個問題鬥爭,你可以使用反斜槓來讓shell直譯器忽略換行符號,正如下面的操作:

這樣使用反斜槓,可以讓我們將每行的內容包含在一個單獨的命令中。讓這個技巧可以應用,要注意的地方:換行,必須在反斜槓後面馬上出現(也就是,在輸入了反斜槓之後,就必須換行了)。 如果,你將一個空格符放置在反斜槓後面,那麼,空格符號會被忽略,而不是換行符被忽略。反斜槓符,也可以被用於,將特殊的符號插入到文字。special characters into our text. 這些符號,被叫做—轉移字元,下面就有一些轉移字元:

轉義字元 ………………….. 名字 可能的用途
n 換行符 新增空白行在文字中
t 製表符 將水平製表符新增到文字中
a 提醒 讓你的終端發出嘟嘟聲。
 \ 反斜槓 插入一個反斜槓符
f formfeed Sending this to your printer ejects thepage

轉移字元的應用很常見。非常常見轉移字元,這個想法,首先出現在C語言裡面。今天 shell解釋程式、C++、perl、python、awk、tcl 和其他程式語言都使用了轉移字元這個概念。通過使用 echo 命令的 -e 選項,我們將展示上述轉移字元的應用:

相關文章