一、环境

ubuntu14.04 x86_64

二、字符串操作

1.获得字符串长度

类似C语言中的strlen()

${#variable_name}

eg:

$name=zhangsan$echo${#name}8$

expr length variable_name

note: variable_name不能为空

$exprlength$name$8

2.字符串提取

类似java中的substring()

${variable_name:start_index:length} 从左到右,从第start_index(0)开始,length长的子串
${variable_name:0-start_pos:length} 从结尾倒起数第start_pos开始,length长的子串

eg:

$echo${name:0:4}zhang$echo${name:2}#从第二个位置开始,到结束angsan$echo${name:0-4:2}gs$echo${name:0-4}#从倒数第4开始,到结束gsan$

3.字符串截取

从左到右删除

${variable_name#*separator} separator是你要分隔的字符,到第一个separator的位置

${variable#pattern}检查是否以指定的pattern结束,如果是,则使用variable的内容并从其左侧删除pattern所能够匹配到的最短结果。

pattern:

* 匹配零个或多个字符

? 匹配任意单个字符

[...] 匹配指定字符组中任意单个字符

[!...] 匹配不在字符组中的任意单个字符

类似C语言中的strchr()

eg:

$name=zhangsan-lisi-wangwu-baidi$echo${name#*-}lisi-wangwu-baidi$$var=testcase$echo${var#?e}#从左侧删除最短的匹配scase$echo${var#*s}tcase

${variable_name##*separator} 到最后一个separator的位置

${variable##pattern}检查是否以指定的pattern结束,如果是,则使用variable的内容并从其左侧删除pattern所能够匹配到的最长结果(贪吃)。

类似C语言中的rindex()

eg:

$echo${name##*-}baidi$$var=testcase$echo${var##*s}#从左侧删除最长的匹配e

从右到左删除

${variable_name%separator*} ${variable%pattern}

${variable_name%%separator*} ${variable%%pattern}

eg:

$echo${name%-*}zhangsan-lisi-wangwu$echo${name%%-*}zhangsan$$var=testcase$echo${var%e}#从右侧删除最短匹配testcas$echo${var%s*e}testca

4.字符串拆分

类似C语言的strtok()

${variable_name//ch/ch_replace} 将variable_name中的字符ch替换为ch_replace字符

eg:

$name=zhangsan-lisi-wangwu-baidi$name=${name//-/,}#将横杠替换为逗号$echo${name}zhangsan,lisi,wangwu,baidi$name={name//,/}#将逗号替换为空格$echo${name}zhangsanlisiwangwubaidi#可用于后续的for循环$$var=tescase$echo${var%%s*e}#从右侧删除最长匹配te

IFS 通过设置IFS的值,进行拆分


eg:

$test=aaa,bbb,ccc,ddd,eee$arr=${test}$echo${arr}aaa,bbb,ccc,ddd,eee$OLD_IFS=$IFS$IFS=,$arr2=${test}$echo${arr2}aaabbbcccdddeee$IFS=${OLD_IFS}