shell中除使用普通字元外,還可以使用一些具有特殊含義和功能的特殊字元。在使用它們時應注意其特殊的含義和作用範圍。
下面分別對這些特殊字元加以介紹。
1. 萬用字元
萬用字元用於模式匹配,如檔名匹配、路經名搜尋、字串查詢等。常用的萬用字元有*、?和括在方括號[ ]中的字串行。使用者可以在作為命令引數的檔名中包含這些萬用字元,構成乙個所謂的「模式串」,在執行過程中進行模式匹配。
* 代表任何字串(長度可以不等),例如:「f*」匹配以f打頭的任意字串。但應注意,檔名前的圓點(.)和路經名中的斜線(/)必須顯式匹配。例如「*」不能匹配.file,而「.*」才可以匹配.file。
? 代表任何單個字元。
[]代表指定的乙個字元範圍,只要檔名中[]位置處的字元在[]中指定的範圍之內,那麼這個檔名就與這個模式串匹配。方括號中的字元範圍可以由直接給出的字元組成,也可以由表示限定範圍的起始字元、終止字元及中間的連字元(-)組成。例如,f [a- d] 與f [abcd]的作用相同。shell將把與命令列中指定的模式串相匹配的所有檔名都作為命令的引數,形成最終的命令,然後再執行這個命令。
下面我們給出說明這些萬用字元的具體含義。
*text*
當前目錄下所有檔名中包含有text的檔案的名稱。
[ab-dm]*
當前目錄下所有以a、b、c、d、m開頭的檔案的名稱。
[ab-dm]?
當前目錄下所有以a、b、c、d、m開頭且後面只跟有乙個字元的檔案的名稱。
/usr/bin/??
目錄/usr/bin下所有名稱為兩個字元的檔案的名稱。
特別需要注意的是,連字元「-」僅在方括號內有效,表示字元範圍,如在方括號外面就成為普通字元了。而*和?只在方括號外面是萬用字元,若出現在方括號之內,它們也失去萬用字元的能力,成為普通字元了。例如,模式「- a[*?]abc」中只有一對方括號是萬用字元,*和?均為普通字元,因此,它匹配的字串只能是- a*abc和- a?abc。
最後說明一下使用萬用字元時需要注意的一些問題。由於*、?和[]對於shell來說具有比較特殊的意義,因此在正常的檔名中不應出現這些字元。特別是在目錄名中不要出現它們,否則shell匹配起來可能會無窮的遞迴下去。另外要注意的一點是:如果目錄中沒有與指定的模式串相匹配的檔名,那麼shell 將使用此模式串本身作為引數傳給有關命令。這可能就是命令中出現特殊字元的原因所在。
2. 引號
在shell中引號分為三種:單引號,雙引號和反引號。
1) 單引號『
由單引號括起來的字元都作為普通字元出現。特殊字元用單引號括起來以後,也會失去原有意義,而只作為普通字元解釋。例如:
$ string=』$path 』
$ echo $string
$path
$可見$保持了其本身的含義,作為普通字元出現。
2) 雙引號 「
由雙引號括起來的字元,除$、、』、和」這幾個字元仍是特殊字元並保留其特殊功能外,其餘字元仍作為普通字元對待。對於$來說,就是用其後指定的變數的值來代替這個變數和$;對於轉義字元,它告訴shell不要對其後面的那個字元進行特殊處理,只當作普通字元即可。可以想見,在雙引號中需要在前面加上的只有四個字元$,,』和」本身。
例如,我們假定path的值為.:/usr/bin:/bin,輸入如下命令:
$ teststring=」$path」$path」
$ echo $teststring
.:/usr/bin:/ bin」$path
$讀者可以自己試一下在第二個雙引號之前不加會產生什麼結果。
3) 反引號 `
反引號(`)這個字元所對應的鍵一般位於鍵盤的左上角,不要將其同單引號(』)混淆。反引號括起來的字串被shell解釋為命令列,在執行時,shell首先執行該命令列,並以它的標準輸出結果取代整個反引號(包括兩個反引號)部分。例如:
$ pwd
/home/xyz
$ string=」current directory is `pwd`」
$ echo $string
current directour is /home/xyz
$shell執行echo命令時,首先執行`pwd`中的命令pwd,並將輸出結果/home/xyz取代`pwd`這部分,最後輸出替換後的整個結果。
反引號還可以巢狀使用。但需注意,巢狀使用時內層的反引號必須用反斜線()將其轉義。例如:
$ 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
3. 注釋符
在shell程式設計中經常要對某些正文行進行注釋,以增加程式的可讀性。在shell中以字元「#」開頭的正文行表示注釋行。
4.資料或程式控制使用的特殊字元:
主要有:
> (file) 輸出重定向到檔案
>> (file) 輸出重定向到檔案,內容加到已存在的檔案尾部
< (file) 輸入重定向到檔案
; 命令分隔符
| 管道符,把一條命令的輸出重定向為另一命令的輸入
& 放在命令之後強迫命令在後台執行
`` 命令替換,重定向一條命令的輸出為另一命令的引數
5.用於引用和逃逸的特殊字元:
1) 逃逸符\ 表示以後的字元不具有特殊的含義或不是shell的函式,
2) 除此之外,bash還可以識別一些c語言中的轉義序列,如:
\a 響伶
\b 回退
\e escape
\n 換行
\r 回車
\t 製表
\v 製表
\\ 反斜線
\nnn 八進位制的ascii編碼
\xnnn 十六進製制的ascii編碼
3) 引用符'和": 將特殊字元或由空白分隔的字引用起來組成乙個簡單字串
兩者區別在與,雙引號內的內容可以進行引數和變數替換
shell的特殊字元
點 命令 點 命令是乙個shell內部命令,它可以使使用者在當前的shell中執行程式,而不建立子程序。注釋 shell指令碼的注釋符號 重定向符 用法 command filename,可以將command的輸出儲存在filename檔案中。同 類似,但表示追加。用法 command filena...
SHELL特殊字元
字元含義 1 通常用於注釋,通常 前後留乙個空格 2 某些模式匹配如sed,數值常量表示式 及引數替換 中也使用 命令分割符,允許單行寫多個的命令,例 echo var1 echo var2 case 的選項結尾符 1 等同與source命令,載入指令碼檔案,可理解為python的import 2 ...
shell特殊字元
這篇博文記錄平時工作,shell中讓人犯迷糊的特殊字元。shell中特殊字元挺多,不適合花太多精力去蒐集 整理,我的想法是遇到了便總結下來,寫到這篇文件中,慢慢積累。百分號在計算公式裡可以取餘,這個就不說了。這裡記錄的是,可以按照模板對原字串進行擷取。舉例如下 root timmy scripts ...