欢迎光临散文网 会员登陆 & 注册

TLCL学习笔记|第35章|字符串和数字|part1(参数展开)

2022-05-06 02:18 作者:LogByMax  | 我要投稿

(认知有限,如有不妥,还望告知,欢迎讨论)


参数展开时注意使用{}

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

TLCL学习笔记|第35章|字符串和数字|part1(参数展开)的评论 (共 条)

分享到微博请遵守国家法律