引用錯誤。在命令行中引用是很重要的。
這裡只講述引用的基本規則。因為使用引用的例子很多。本書接下來的兩個部分將一一
予以講述。腳本中執行行操作時, s h e l l將對腳本設置予以解釋。要采取一種方法防止s h e l l這
樣做,即使用引用號,包括各式引用或使用反斜線。
下面列出各種引用類型。
" " 雙引號 ` 反引號
' ' 單引號 \ 反斜線
使用雙引號可引用除字符$、`、\外的任意字符或字符串。這些特殊字符分別為美元符號,
反引號和反斜線,對s h e l l來說,它們有特殊意義。如果使用雙引號將字符串賦給變量並反饋
它,實際上與直接反饋變量並無差別。
[root@localhost huangcd]# string="nihao huang cheng du"
[root@localhost huangcd]# echo "$string"
nihao huang cheng du
[root@localhost huangcd]# echo $string
nihao huang cheng du
因為s h e l l將" "符號裡的字符串賦予變量m y d a t e,d a t e已沒有特定意義,故此變量只保存單
詞d a t e。
[root@localhost huangcd]# mydate="date"
[root@localhost huangcd]# echo $mydate
date
如果要查詢包含空格的字符串,經常會用到雙引號。以下使用g r e p抽取名字“Davey Wi r e”,
因為沒有加雙引號, g r e p將“D a v e y”認作字符串,而把“Wi r e”當作文件名。
要解決這個問題,可將字符串加雙引號。這樣s h e l l會忽略空格,當使用字符時,應總是
使用雙引號,無論它是單個字符串或是多個單詞。
[root@localhost huangcd]# grep "Sabayon user" /etc/passwd
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
在一個反饋的文本行裡可以使用雙引號將變量引起來。下面的例子中, s h e l l反饋文本行,
遇到符號$,知道這是一個變量,然後用變量值b o y替換變量$ B O Y。
[root@localhost huangcd]# boy="BOY"
[root@localhost huangcd]# echo "The $boy did well"
The BOY did well
[root@localhost huangcd]# echo "the "$boy" did well"
the BOY did well
單引號與雙引號類似,不同的是s h e l l會忽略任何引用值。換句話說,如果屏蔽了其特殊
含義,會將引號裡的所有字符,包括引號都作為一個字符串。使用上一個例子,結果如下:
[root@localhost huangcd]# girl='GIRL'
[root@localhost huangcd]# echo "the '$girl' did well"
the 'GIRL' did well
[root@localhost huangcd]# echo 'the '$girl' did well'
the GIRL did well
反引號用於設置系統命令的輸出到變量。s h e l l將反引號中的內容作為一個系統命令,並
執行其內容。使用這種方法可以替換輸出為一個變量。反引號可以與引號結合使用。
[root@localhost huangcd]# echo `hello`
bash: hello: command not found
[root@localhost huangcd]# echo `date`
2013年 12月 07日 星期六 10:51:55 CST
[root@localhost huangcd]# date +%A" the "%e" of "%B" "%Y
星期六 the 7 of 十二月 2013
打印當前系統上用戶數目:
[root@localhost huangcd]# echo "`who|wc -l`"
2
如果下一個字符有特殊含義,反斜線防止s h e l l誤解其含義,即屏蔽其特殊含義。下述字
符包含有特殊意義: & * + ^ $ ` " | ?。
上述語句同樣可用於$ $命令, s h e l l解釋其為現在進程I D號,使用反斜線屏蔽此意,僅打
印$ $。
[root@localhost huangcd]# echo \*
*
[root@localhost huangcd]# echo $$
4936
[root@localhost huangcd]# echo \$$
$$