歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> linux shell編程指南第十五章------引號

linux shell編程指南第十五章------引號

日期:2017/3/1 13:51:41   编辑:SHELL編程
上一章介紹了變量和替換操作,在腳本中執行變量替換時最容易犯的一個錯誤就是由於

引用錯誤。在命令行中引用是很重要的。

這裡只講述引用的基本規則。因為使用引用的例子很多。本書接下來的兩個部分將一一
予以講述。腳本中執行行操作時, 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 \$$
$$

在引用時會遇到一些問題且經常出錯。我在使用引用時遵循兩條規則:
1) 反饋字符串用雙引號;但不要引用反饋本身。
2) 如果使用引用得到的結果不理想,再試另一種,畢竟只有三種引用方式,可以充分嘗
試。
Copyright © Linux教程網 All Rights Reserved