TLCL學習筆記|第35章|字符串和數字|part1(參數展開)
(認知有限,如有不妥,還望告知,歡迎討論)
參數展開時注意使用{}
eg.

管理空變量的展開
${parameter:-word}
若 parameter 沒有設置(例如,不存在)或者為空,展開結果是 word 的值。若 parameter 不為空,則展開結果是 parameter 的值。

${parameter:=word}
若 parameter 沒有設置或為空,展開結果是 word 的值。另外,word 的值會賦值給 parameter。 若 parameter 不為空,展開結果是 parameter 的值。

${parameter:?word}
若 parameter 沒有設置或為空,這種展開導致腳本帶有錯誤退出,并且 word 的內容會發(fā)送到標準錯誤。若 parameter 不為空, 展開結果是 parameter 的值。

${parameter:+word}
若 parameter 沒有設置或為空,展開結果為空。若 parameter 不為空, 展開結果是 word 的值會替換掉 parameter 的值;然而,parameter 的值不會改變。

字符串展開
${#parameter}
展開成由 parameter 所包含的字符串的長度。

${parameter:offset}?和?${parameter:offset:length}
從 parameter 所包含的字符串中提取一部分字符。提取的字符始于 第 offset 個字符(從字符串開頭算起)直到字符串的末尾,除非指定提取的長度。

${parameter#pattern} 和?${parameter##pattern}
從 paramter 所包含的字符串中清除開頭一部分文本,#清除最短匹配結果,##清除最長匹配結果。(我現在也不知道這有什么用。。。)

${parameter%pattern} 和?${parameter%%pattern}
類似于上一條,只不過這里反過來,從末尾開始清除

${parameter/pattern/string} 和?${parameter//pattern/string} 和${parameter/#pattern/string}?和?${parameter/%pattern/string}
對 parameter 的內容執(zhí)行查找和替換操作。
上面的操作依次對應:
只將第一個出現的pattern替換成string;
將所有出現的pattern都替換成string;
將出現在開頭的pattern替換成string;
將出現在結尾的pattern替換成string(當/string 省略掉時,可能會導致刪除匹配的文本。)

bash支持字符串的大小寫轉換
第一種方法:使用declare
能強制一個變量總是包含所需的格式,無論如何賦值給它。
(這個例子好像macOS測不了,沒有-u 和-l的參數[1],但是bash文檔里有[2],不知道為什么,后面再看看)
第二種方法:使用對應的參數展開
(不知道為什么的macOS也不行系列。。。)
${parameter,,} ?----?把 parameter 的值全部展開成小寫字母。
${parameter,}??----??僅僅把 parameter 的第一個字符展開成小寫字母。
${parameter^^}??----??把 parameter 的值全部轉換成大寫字母。
${parameter^}??----?僅僅把 parameter 的第一個字符轉換成大寫字母(首字母大寫)。
進制表示

=END=
=reference=
[1]https://ss64.com/osx/declare.html
[2]https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins