您的位置:首页 > 运维架构 > Shell

shell变量的相关操作(2)

2012-01-29 15:35 302 查看
变量的字符串长度${#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



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: