shell变量的相关操作(2)

本文深入探讨了Shell脚本中变量操作与字符串处理的基本技巧,包括如何获取字符串长度、匹配与替换字符串、以及从字符串中提取特定部分的方法。通过实际示例,详细解释了${#var}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量的字符串长度${#var}

$ username4=abcde
$ echo ${#username4}
5
注:

${#*}和${#@}表示位置参数的个数.

对于数组来说, ${#array[*]}和${#array[@]}表示数组中元素的个数.



${var#Pattern}, ${var##Pattern} 

从变量$var的开头删除最短或最长匹配$Pattern 的子串.

$ user="/usr/local/bin/abc"
$ echo ${user#/}
usr/local/bin/abc
$ echo ${user##*/}
abc
$ var1=abcd12345abc6789
$ echo ${var1#a*c}
d12345abc6789
$ echo ${var1##a*c}
6789
$ echo ${var1##b*c} #字符串不以b开头,所以不匹配
abcd12345abc6789


${var%Pattern}, ${var%%Pattern}

从变量$var的结尾删除最短或最长匹配$Pattern 的子串

$ echo ${var1%b*9}
abcd12345a
$ echo ${var1%%b*9}
a
$ echo ${var1%%b*8}  #字符串不以8结尾,所以不匹配
abcd12345abc6789



${var:pos}  变量var 从位置pos 开始扩展

$ echo ${var1:5}
2345abc6789
$ echo ${var1:-5} #直接写-5无效
abcd12345abc6789
$ echo ${var1: -5}  #在-5前加空格
c6789
$ echo ${var1: (-5)}
c6789


${var:pos:len}

变量var 从位置pos 开始, 并扩展len 个字符.

$ echo ${var1:3:4}
d123
$ echo ${var1:(-3):2}
78


${var/Pattern/Replacement}
使用Replacement 来替换变量var 中第一个匹配Pattern的字符串。如果省略Replacement , 那么第一个匹配Pattern的字符串将被替换为空, 也就是被删除了.
${var//Pattern/Replacement}
全局替换. 所有在变量var 匹配Pattern的字符串, 都会被替换为Replacement。和上边一样, 如果省略Replacement , 那么所有匹配Pattern的字符串, 都将被替换为空, 也就是被删除掉.

$ echo ${var1/abc/xyz}
xyzd12345abc6789
$ echo ${var1//abc/xyz}
xyzd12345xyz6789
$ echo ${var1/abc/}
d12345abc6789
$ echo ${var1//abc/}
d123456789


${var/#Pattern/Replacement}
如果变量var 的前缀匹配Pattern, 那么就使用Replacement 来替换匹配到Pattern的字符串.
${var/%Pattern/Replacement}
如果变量var 的后缀匹配Pattern, 那么就使用Replacement 来替换匹配到Pattern的字符串.

$ echo ${var1/#abc/xyz}
xyzd12345abc6789
$ echo ${var1/#bc/xyz} #字符串不以bc开头,所以不匹配
abcd12345abc6789
$ echo ${var1/%789/xyz}
abcd12345abc6xyz
$ echo ${var1/%78/xyz} #字符串不以78结尾,所以不匹配
abcd12345abc6789


${!varprefix*}, ${!varprefix@}
匹配所有之前声明过的, 并且以varprefix 开头的变量.

$ xyz23=whatever
$ xyz24=

$ a=${!xyz*}
$ echo $a
xyz23 xyz24

$ b=${!xyz@}
$ echo $b
xyz23 xyz24






                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值