變量配置方式 | 說明 |
${變量#關鍵詞} ${變量##關鍵詞} |
若變量內容從頭開始的數據符合『關鍵詞』,則將符合的最短數據刪除 若變量內容從頭開始的數據符合『關鍵詞』,則將符合的最長數據刪除 |
${變量%關鍵詞} ${變量%%關鍵詞} |
若變量內容從尾向前的數據符合『關鍵詞』,則將符合的最短數據刪除 若變量內容從尾向前的數據符合『關鍵詞』,則將符合的最長數據刪除 |
${變量/舊字符串/新字符串} ${變量//舊字符串/新字符串} |
若變量內容符合『舊字符串』則『第一個舊字符串會被新字符串取代』 若變量內容符合『舊字符串』則『全部的舊字符串會被新字符串取代』 |
底下表格中var 與 str 爲變量,我們要針對 str 是否有配置來決定 var 的值! 一般來說, str: 代表『str沒配置或爲空的字符串時』;至於 str 則僅爲『沒有該變量』。
變量配置方式 | str 沒有配置 | str 爲空字符串 | str 已配置非爲空字符串 |
var=${str-expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
var=${str=expr} | str=expr var=expr |
str 不變 var= |
str 不變 var=$str |
var=${str:=expr} | str=expr var=expr |
str=expr var=expr |
str 不變 var=$str |
var=${str?expr} | expr 輸出至 stderr | var= | var=$str |
var=${str:?expr} | expr 輸出至 stderr | expr 輸出至 stderr | var=$str |
符號 | 意義 |
* | 代表『0 個到無窮多個』任意字符 |
? | 代表『一定有一個』任意字符 |
[] | 同樣代表『一定有一個在括號內』的字符(非任意字符)。例如 [abcd] 代表『一定有一個字符, 可能是 a, b, c, d這四個任何一個』 |
[ -] | 若有減號在中括號內時,代表『在編碼順序內的所有字符』。例如 [0-9] 代表 0 到 9之間的所有數字,因爲數字的語系編碼是連續的! |
[^] | 若中括號內的第一個字符爲指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個字符,只要是非 a, b, c的其他字符就接受的意思。 |
bash環境中的特殊符號
符號 | 內容 |
# | 批註符號:這個最常被使用在 script 當中,視爲說明!在後的數據均不運行 |
\ | 跳脫符號:將『特殊字符或通配符』還原成一般字符 |
| | 管線(pipe):分隔兩個管線命令的界定(後兩節介紹); |
; | 連續命令下達分隔符:連續性命令的界定 (注意!與管線命令並不相同) |
~ | 用戶的家目錄 |
$ | 取用變量前導符:亦即是變量之前需要加的變量取代值 |
& | 工作控制 (job control):將命令變成背景下工作 |
! | 邏輯運算意義上的『非』 not 的意思! |
/ | 目錄符號:路徑分隔的符號 |
>, >> | 數據流重導向:輸出導向,分別是『取代』與『累加』 |
<, << | 數據流重導向:輸入導向 (這兩個留待下節介紹) |
'' | 單引號,不具有變量置換的功能 |
"" | 具有變量置換的功能! |
`` | 兩個『` 』中間爲可以先運行的命令,亦可使用 $( ) |
() | 在中間爲子 shell 的起始與結束 |
{} | 在中間爲命令區塊的組合! |