字符串的操作

字符串的操作

一.判断读取字符串
${var} ;变量var的值与$var相同
${var-DEFAULT} ;如果var没有被声明,那么就以$DEFAULT作为其值*
${var=DEFAULT};如果var没有被声明,那么就以$DEFAULT作为其值*
${var+OTHER};如果var被声明了,那么其值就是$OTHER,否则为空。
${var.+OTHER} 如果var被声明了,那么其值就是$OTHER,否则为空。
${var?ERR};如果var没有被声明,那么就打印$ERR*
${var.?ERR};如果var没有被声明,那么就打印$ERR*
${!varprefix*};匹配之前所有以varprefix开头进行声明的变量
${!varprefix@}匹配所有以varprefix开头进行声明的变量

例子;

[root@foundation101 mnt]# echo ${abc-ok}
ok
[root@foundation101 mnt]# echo ${abc}

[root@foundation101 mnt]# echo ${abc=ok}
ok
[root@foundation101 mnt]# echo ${abc="ok"}
ok
[root@foundation101 mnt]# echo ${abc}
Ok

[root@foundation101 mnt]# var1=11;var2=22;var3=33
[root@foundation101 mnt]# echo ${!va@}
var1 var2 var3
[root@foundation101 mnt]# echo ${!va*}
var1 var2 var3

二.字符串的操作
${#string} 长度
${string:position} 在字符串中,从位置$position开始提取字符串
${string:position:length} 在字符串中从位置$position开始提取长度为length的字串
${string%substring} 从字符串的结尾开始,删除最短匹配substring的子串
${string%%substring}从字符串的结尾开始,删除最长匹配substring的子串
${string/substring/replace} 使用$replace来代替第一个$substring
${string//substring/replace} 使用$replace 来代替所有$substring
${string/#substring/replace};如果$string的前缀匹配$subsstring,那么就用$replace来代替匹配的到的$substring
${string/%substring/replace}如果$string的后缀匹配$subsstring,那么就用$replace来代替匹配的到的$substring

例子:
1,长度‘

[root@foundation101 mnt]# test="best wish to you"
[root@foundation101 mnt]# echo ${#test}
16
[root@foundation101 mnt]# echo ${test} | wc -m      ##多一个字符
17
[root@foundation101 mnt]# echo `expr length $mimi`
15

${#变量名}得到字符串的长度
2,截取字符串
[root@foundation101 mnt]# echo ${test:5}
wish to you
[root@foundation101 mnt]# echo ${test:5:8}
wish to

${变量名:起始:长度} 得到子字符串

3,字符串的删除

root@foundation101 mnt]# mimi="mmm/ccc/ml/boot"
[root@foundation101 mnt]# echo ${mimi#*/}
ccc/ml/boot
[root@foundation101 mnt]# echo ${mimi#/}
mmm/ccc/ml/boot
[root@foundation101 mnt]# echo ${mimi##/}
mmm/ccc/ml/boot
[root@foundation101 mnt]# echo ${mimi##*/}
boot
[root@foundation101 mnt]# echo ${mimi%*/}
mmm/ccc/ml/boot
[root@foundation101 mnt]# echo ${mimi%/*}
mmm/ccc/ml
[root@foundation101 mnt]# echo ${mimi%%/*}
mmm

${变量名%substring}从字符串的结尾开始配备substring
${变量名#substring} 从字符串的开头配备substring

注意:
${test##/} ${test%/} 分别是得到文件名或者目录地址最简单的方法

4,字符串的替换

[root@foundation101 mnt]# echo ${mimi/\//\\}
mmm\ccc/ml/boot
[root@foundation101 mnt]# echo ${mimi//\//\\}
mmm\ccc\ml\boot

${变量/替换/替换值} 一个/表示替换第一个,//表示替换所有
当查找中出现了“/” 请加转义字符”/表示

三性能比较

[root@foundation101 mnt]# time for i in $(seq 1000) ;do a=$(expr length $mimi);done

real	0m0.829s
user	0m0.181s
sys	0m0.688s
[root@foundation101 mnt]# time for i in $(seq 1000) ;do a=${#mimi};done
real	0m0.005s
user	0m0.005s
sys	0m0.001s

速度相差较大,调用外部命令,与内置操作符性能相差非常大,在shell编程中尽量使用内置操作符,或者函数完成,使用sed,awk会出现类似的结果。

posted @ 2016-07-26 16:54  夏日花开  阅读(150)  评论(0编辑  收藏  举报