Linux Shell 编程 之 参数和变量扩展

 ${param}

拓展变量的值,以及防止变量被错误解析,比如:${hello}world、${arr[1]}

${arr[*]} 或 ${arr[@]}:返回数组 arr 的所有元素


${!param}

bash 2 中可以使用 ${!param} 来进行间接引用,比如 ${!#} 返回最后一个位置参数

${!arr[*]} 或 ${!arr[@]}:返回数组 arr 的所有下标


删除匹配子串

${param#pattern}:从 param 开头删除 pattern 匹配的子串(最小匹配)

${param#pattern}:从 param 开头删除 pattern 匹配的子串(最大匹配)

${param%pattern}:从 param 结尾删除 pattern 匹配的子串(最小匹配)

${param%%pattern}:从 param 结尾删除 pattern 匹配的子串(最大匹配)


提取子串

${param:offset}:提取 param 中从位置 offset 开始的子串(offset 从 0 开始)。如果 offset 为负数,表示从字符串结尾开始,此时 offset 必须被括号括起来,或者在 offset 之前加一个空格

${param:offset:length}:提取 param 中从 offset 开始的长度为 length 的子串,其他同上

param 可以为 * 或 @,表示对位置参数进行分片操作,比如 ${@:3:2} 返回从第 3 个位置参数开始的 2 个位置参数


根据变量状态赋值

${var-string}:若 var 未定义,则返回 string,否则返回 var 的值

${var:-string}:若 var 未定义或为空,则返回 string,否则返回 var 的值

${var=string}:若 var 未定义,则将 string 赋给 var,然后返回 var 的值,否则直接返回 var 的值

${var:=string}:若 var 未定义或为空,则将 string 赋给 var,然后返回 var 的值,否则直接返回 var 的值

${var+string}:若 var 已定义,则返回 string,否则返回 var 的值

${var:+string}:若 var 为非空,则返回 string,否则返回 var 的值

${var?string}:若 var 未定义,则将 string 输出到标准错误,并退出脚本,否则返回 var 的值

${var:?string}:若 var 未定义或为空,则将 string 输出到标准错误,并退出脚本,否则返回 var 的值


模式替换

${param/pattern/string}:将 param 中第一个匹配 pattern 的子串替换为 string

${param//pattern/string}:将 param 中所有匹配 pattern 的子串替换为 string

${param/#pattern/string}:如果 param 开头匹配 pattern,则将开头替换为 string

${param/%pattern/string}:如果 param 结尾匹配 pattern,则将结尾替换为 string

如果 param 是 @ 或 *,表示对所有的位置参数进行模式替换

如果 param 为 arr[@] 或 arr[*],则表示对数组中所有的元素进行模式替换


变量长度和个数

${#param}:返回 param 值的长度

${#*} 和 ${#@}:返回位置参数的个数

${arr[*]} 和 ${arr[@]}:返回数组 arr 的元素个数


变量大小写转换

${param^pattern}:pattern 为单个字符,将 param 中第一个匹配 pattern 的字符转换为大写

${param^^pattern}:pattern 为单个字符,将 param 中所有匹配 pattern 的字符转换为大写

${param,pattern}:pattern 为单个字符,将 param 中第一个匹配 pattern 的字符转换为小写

${param,,pattern}:pattern 为单个字符,将 param 中所有匹配 pattern 的字符转换为小写

param 可以为 * 或 @ 或 arr[*] 或 arr[@]

如果 pattern 为空,则将其视为 ?,表示匹配任意字符


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值