记录下常见的字符串处理,这些自带的操作要比管道符加命令要快而且简洁,应该熟练掌握
定义变量
[root@master ~]# a=123
[root@master ~]# echo $a
123
[root@master ~]#
设置默认值
[root@master ~]# echo ${x}
[root@master ~]# echo ${x:-default} # 如果没有设置x变量值,输出:-后的值,也可以是其他变量,比如$a
default
[root@master ~]# echo ${x:=default} # 如果x没有设置变量值,会把:-后的值赋值给x
default
[root@master ~]# echo $x
default
[root@master ~]#
${x:+}操作
:+之前的变量有值则被:+后的值覆盖,为空就输出空
[root@master ~]# echo $x
default
[root@master ~]# echo ${y:+123}
[root@master ~]# echo ${x:+123}
123
[root@master ~]#
${x:?}操作
:?之前的变量如果有值的话输出变量的值,没有的话输出:?后的值,退出码是1
[root@master ~]# echo ${x:?123}
default
[root@master ~]# echo ${z:?123}
bash: z: 123
[root@master ~]# echo ${z:?"??"}
bash: z: ??
[root@master ~]# echo $?
1
[root@master ~]#
获取变量的长度
[root@master ~]# a=123
[root@master ~]# echo ${#a}
3
[root@master ~]#
变量截取
${x:start:num}:从start+1个字符开始,num指定截取几个。
[root@master ~]# a=123456789
[root@master ~]# echo ${a:2}
3456789
[root@master ~]# echo ${a:2:1}
3
[root@master ~]# echo ${a:2:2}
34
[root@master ~]# echo ${a:2:3}
345
[root@master ~]# echo ${a:2:11}
3456789
[root@master ~]# echo ${a:-1:} # 最小的字符是0
123456789
[root@master ~]# echo ${a:-1:11} # 最长是变量的长度
123456789
[root@master ~]#
删除
[root@master ~]# echo $file
/dir1/dir2/dir3/my.file.txt
[root@master ~]# echo ${file#*/} #从左向右删除一个匹配/和之前的字符
dir1/dir2/dir3/my.file.txt
[root@master ~]# echo ${file##*/} #从左向右删除所有一个匹配/和之前的字符
my.file.txt
[root@master ~]# echo ${file%/*} #从右向左删除一个匹配/和之前的字符
/dir1/dir2/dir3
[root@master ~]# echo ${file%%/*}#从右向左删除所有一个匹配/和之前的字符
[root@master ~]#
替换
[root@master ~]# echo ${file/dir/abc} # 替换匹配的第一个
/abc1/dir2/dir3/my.file.txt
[root@master ~]# echo ${file//dir/abc} # 替换匹配所有的字符串
/abc1/abc2/abc3/my.file.txt
[root@master ~]#
大小写转换
[root@master ~]# file3=HelloWorld
[root@master ~]# echo ${file3,,}
helloworld
[root@master ~]# echo ${file3^^}
HELLOWORLD
[root@master ~]#