TLCL学习笔记|第35章|字符串和数字|part1(参数展开)
(认知有限,如有不妥,还望告知,欢迎讨论)
参数展开时注意使用{}
eg.

管理空变量的展开
${parameter:-word}
若 parameter 没有设置(例如,不存在)或者为空,展开结果是 word 的值。若 parameter 不为空,则展开结果是 parameter 的值。

${parameter:=word}
若 parameter 没有设置或为空,展开结果是 word 的值。另外,word 的值会赋值给 parameter。 若 parameter 不为空,展开结果是 parameter 的值。

${parameter:?word}
若 parameter 没有设置或为空,这种展开导致脚本带有错误退出,并且 word 的内容会发送到标准错误。若 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 的内容执行查找和替换操作。
上面的操作依次对应:
只将第一个出现的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