shell中的特殊字元

2021-08-28 01:50:38 字數 3212 閱讀 6604

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 ...