分類:
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 回退
\eescape
\n 換行
\r 回車
\t 製表
\v 製表
\\ 反斜線
\nnn 八進位制的ascii編碼
\xnnn 十六進製制的ascii編碼
3) 引用符'和": 將特殊字元或由空白分隔的字引用起來組成乙個簡單字串
兩者區別在與,雙引號內的內容可以進行引數和變數替換
shell中的特殊字元
shell中除使用普通字元外,還可以使用一些具有特殊含義和功能的特殊字元。在使用它們時應注意其特殊的含義和作用範圍。下面分別對這些特殊字元加以介紹。1.萬用字元 萬用字元用於模式匹配,如檔名匹配 路經名搜尋 字串查詢等。常用的萬用字元有 和括在方括號 中的字串行。使用者可以在作為命令引數的檔名中包含...
shell中的 處理字元用法
shell提供了簡單強大字串處理方式,有時候需要對path進行處理,通過 的搭配使用,可以方便快捷的得到結果。廢話少說,舉例子。usr bin env bash dir dir1 dir2 dir3 abc.def.txt echo dir dir 刪除最左邊 及其左邊所有字元 process na...
shell中的字串
字串有三種形式 由單引號 包圍的字串 任何字元都會原樣輸出,在其中使用變數是無效的 字串中不能出現單引號,即使對單引號進行轉義也不行 由雙引號 包圍的字串 如果其中包含了某個變數,那麼該變數會被解析 得到該變數的值 而不是原樣輸出 字串中可以出現雙引號,只要它被轉義了就行 不被引號包圍的字串 不被引...