標籤:alt card 工作 class 家目錄 src text 環境 pad
在 bash 的作業環境中還有一個非常有用的功能,那就是萬用字元 (wildcard) ! 我們利用 bash 處理資料就更方便了!底下我們列出一些常用的萬用字元喔:
符號 |
意義 |
* |
代表『 0 個到無窮多個』任一字元 |
? |
代表『一定有一個』任一字元 |
[ ] |
同樣代表『一定有一個在括弧內』的字元(非任一字元)。例如 [abcd] 代表『一定有一個字元, 可能是 a, b, c, d 這四個任何一個』 |
[ - ] |
若有減號在中括弧內時,代表『在編碼順序內的所有字元』。例如 [0-9] 代表 0 到 9 之間的所有數字,因為數位語系編碼是連續的! |
[^ ] |
若中括弧內的第一個字元為指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個字元,只要是非 a, b, c 的其他字元就接受的意思。 |
接下來讓我們利用萬用字元來玩些東西吧!首先,利用萬用字元配合 ls檔案名稱看看:
[[email protected] ~]# LANG=C <==由於與編碼有關,先配置語系一下範例一:找出 /etc/ 底下以 cron 為開頭的檔名[[email protected] ~]# ll -d /etc/cron* <==加上 -d 是為了僅顯示目錄而已範例二:找出 /etc/ 底下檔案名稱『剛好是五個字母』的檔案名稱[[email protected] ~]# ll -d /etc/????? <==由於 ? 一定有一個,所以五個 ? 就對了範例三:找出 /etc/ 底下檔案名稱含有數位檔案名稱[[email protected] ~]# ll -d /etc/*[0-9]* <==記得中括弧左右兩邊均需 *範例四:找出 /etc/ 底下,檔名開頭非為小寫字母的檔案名稱:[[email protected] ~]# ll -d /etc/[^a-z]* <==注意中括弧左邊沒有 *範例五:將範例四找到的檔案複製到 /tmp 中[[email protected] ~]# cp -a /etc/[^a-z]* /tmp
除了萬用字元之外,bash 環境中的特殊符號有哪些呢?底下我們先彙整一下:
符號 |
內容 |
# |
批註符號:這個最常被使用在 script 當中,視為說明!在後的資料均不運行 |
\ |
跳脫符號:將『特殊字元或萬用字元』還原成一般字元 |
| |
管線 (pipe):分隔兩個管線命令的界定(後兩節介紹); |
; |
連續命令下達分隔字元:連續性命令的界定 (注意!與管線命令並不相同) |
~ |
使用者的家目錄 |
$ |
取用變數前置字元:亦即是變數之前需要加的變數取代值 |
& |
工作控制 (job control):將命令變成背景下工作 |
! |
邏輯運算意義上的『非』 not 的意思! |
/ |
目錄符號:路徑分隔的符號 |
>, >> |
資料流重導向:輸出導向,分別是『取代』與『累加』 |
<, << |
資料流重導向:輸入導向 (這兩個留待下節介紹) |
‘ ‘ |
單引號,不具有變數置換的功能 |
" " |
具有變數置換的功能! |
` ` |
兩個『 ` 』中間為可以先啟動並執行命令,亦可使用 $( ) |
( ) |
在中間為子 shell 的起始與結束 |
{ } |
在中間為命令區塊的組合! |
以上為 bash 環境中常見的特殊符號彙整!理論上,你的『檔名』盡量不要使用到上述的字元!
shell中規則運算式與特殊符號