1.雙引號
由雙引號括起來的字符,除$、倒引號(`)和反斜線(\)仍保留其特殊功能外,其余字符均作為普通字符對待。
“$”表示變量替換,即用其後指定的變量的值來代替$和變量;
倒引號表示命令替換;
僅當“\”後面的字符是下述字符之一時,“\”才是轉義字符,這些字符是:“$”、“`”、“"”、“\”或換行符。轉義字符告訴Shell不要對其後面的那個字符進行特殊處理,只是當作普通字符。
例如:
$ echo "My current dir is `pwd` and logname is $LOGNAME"
My current dir is /home/mengqc and logname is mengqc
2. 單引號
由單引號括起來的字符都作為普通字符出現。
例如,
$ echo 'The time is ` date ` , the
file is $HOME/abc '
The time is ` date ` , the file is $HOME/abc
3.倒引號
倒引號括起來的字符串被shell解釋為命令行,在執行時,Shell會先執行該命令行,並以它的標准輸出結果取代整個倒引號部分。在前面示例中已經見過。
例如,
$ echo current directory is ` pwd `
current directory is /home/mengqc
注釋
Shell程序中以“#”開頭的正文行表示注釋。
在shell中引號分為三種:單引號,雙引號和反引號。
單引號 ‘
由單引號括起來的字符都作為普通字符出現。特殊字符用單引號括起來以後,也會失去原有意義,而只作為普通字符解釋。例如:
$ string=’$PATH’
$ echo $string
$PATH
$
可見$保持了其本身的含義,作為普通字符出現。
雙引號 “
由雙引號括起來的字符,除$、、’、和”這幾個字符仍是特殊字符並保留其特殊功能外,其余字符仍作為普通字符對待。對於$來說,就是用其後指定的變量的值來代替這個變量和$;對於而言,是轉義字符,它告訴shell不要對其後面的那個字符進行特殊處理,只當作普通字符即可。可以想見,在雙引號中需要在前面加上的只有四個字符$,,’和”本身。而對”號,若其前面沒有加,則Shell會將它同前一個”號匹配。
例如,我們假定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