shell中的單引號、雙引號、反引號

在shell中引號分爲三種:單引號,雙引號和反引號。

單引號 ‘ 

由單引號括起來的字符都作爲普通字符出現。特殊字符用單引號括起來以後,也會失去原有意義,而只作爲普通字符解釋。單引號用於保持引號內所有字符的字面值,即使引號內的\和回車也不例外,但是字符串中不能出現單引號。(注意是所有,只是單引號本身不能夠出現在其中)。

例如:

$ string=’$PATH’
$ echo $string
$PATH
$

可見$保持了其本身的含義,作爲普通字符出現。

雙引號 “ 

雙引號用於保持引號內所有字符的字面值(回車也不例外),但以下情況除外:

  • $加變量名可以取變量的值

  • 反引號仍表示命令替換

  • \$表示$的字面值

  • \`表示`的字面值

  • \"表示"的字面值

  • \\表示\的字面值

  • 除以上情況之外,在其它字符前面的\無特殊含義,只表示字面值。


例如,我們假定PATH的值爲.:/usr/bin:/bin,輸入如下命令:

$ TestString=”$PATH\”$PATH”
$ echo $TestString
.:/usr/bin:/ bin”$PATH
$

讀者可以自己試一下在第二個雙引號之前不加會產生什麼結果。

 

反引號 ` 

反引號(`)這個字符所對應的鍵一般位於鍵盤的左上角,不要將其同單引號(’)混淆。反引號括起來的字符串被shell解釋爲命令行,在執行時,shell首先執行該命令行,並以它的標準輸出結果取代整個反引號(包括兩個反引號)部分。例如:

$ pwd
/home/xyz
$ string=”current directory is `pwd`”
$ echo $string
current directour is /home/xyz
$


shell執行echo命令時,首先執行`pwd`中的命令pwd,並將輸出結果/home/xyz取代`pwd`這部分,最後輸出替換後的整個結果。

利用反引號的這種功能可以進行命令置換,即把反引號括起來的執行結果賦值給指定變量。當然反引號也可以用$()來代替,並且反引號是比較老的用法。例如:

$ today=`date`
$ echo Today is $today
Today is Mon Apr 15 16:20:13 CST 1999
$


反引號還可以嵌套使用。但需注意,嵌套使用時內層的反引號必須用反斜線()將其轉義。例如:

$ abc=`echo The number of users is `who| wc-l``
$ echo $abc
The number of users is 5
$


在反引號之間的命令行中也可以使用shell的特殊字符。Shell爲得到``中命令的結果,它實際上要去執行``中指定的命令。執行時,命令中的特殊字符,如$,”,?等又將具有特殊含義,並且``所包含的可以是任何一個合法的Shell命令,如:

$ ls
note readme.txt Notice Unix.dir
$ TestString=”`echo $HOME ` ` ls 〔nN〕*`”
$ echo $TestString
/home/yxz note Notice
$


其他情況,讀者可自行試之。

發佈了110 篇原創文章 · 獲贊 20 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章