怎么理解shell字符串切片?${变量:位置起点:长度}/${#}/${%}
Linux云计算交流群:720995729
字符串切片
${变量:位置起点}
指定从变量的哪个位置(索引)开始,截取到字符串结束,字符串的索引从0开始。
${变量:位置起点}
实例一:从指定位置开始截取所有字符串:
[root@www.lutixia.cn ~]# name=lutixia
[root@www.lutixia.cn ~]# echo ${name:2}
tixia
从字符串的第3个字符开始截取,一直截取到字符串结束。
${变量:位置起点:长度}
指定从变量的哪个位置开始,截图指定长度的子字符串。
${变量:位置起点:长度}
实例二:从指定位置开始截取指定长度字符串:
[root@www.lutixia.cn ~]# name=lutixia
[root@www.lutixia.cn ~]# echo ${name:2:2}
ti
通过样式对比切片:
删除前面的字符串:
# 从左边开始,对比变量值,删除最短的符合的字符串:
${变量#样式}
# 从左边开始,对比变量值,删除最长的符合的字符串:
${变量##样式}
${变量#样式} 删除最短的:
[root@www.lutixia.cn ~]# path=/usr/local/nginx
[root@www.lutixia.cn ~]# echo ${path#/*r}
/local/nginx
上面的范例就是通过/*r
样式去比path变量对比。从左边开始,删除最符合的最短的字符串,这样就取到了/usr,然后就返回了/local/nginx
字符串。
${变量##样式} 删除最长的:
[root@www.lutixia.cn ~]# path=/usr/local/nginx
[root@www.lutixia.cn ~]# echo ${path##/*/}
nginx
上面的范例就是通过/*/
样式去比path变量对比。从左边开始,删除最符合的最长的字符串,这样就取到了/usr/local/
,然后就返回了nginx
字符串。
删除后面的字符串:
${变量%样式} 删除最短的:
[root@www.lutixia.cn ~]# site=www.lutixia.cn
[root@www.lutixia.cn ~]# echo ${site%.*}
www.lutixia
上面的范例就是通过.*
样式去与site变量对比。从右边开始,删除最符合的最短的字符串,这样就得到了www.lutixia
字符串。
需要注意的是这里.
,就是普通的点,不是正则里面的可以匹配任意单个字符的点。
${变量%%样式} 删除最长的:
[root@www.lutixia.cn ~]# site=www.lutixia.cn
[root@www.lutixia.cn ~]# echo ${site%%.*}
www
上面的范例就是通过.*
样式去与site变量对比。从右边开始,删除最符合的最长的字符串,这样就得到了www
字符串。
平时习惯了用awk的,也可以用下面的命令获取:
[root@www.lutixia.cn ~]# site=www.lutixia.cn
[root@www.lutixia.cn ~]# echo $site |awk -F. '{print $1}'
www
平时习惯了用sed的,也可以用下面的命令获取:
[root@www.lutixia.cn ~]# site=www.lutixia.cn
[root@www.lutixia.cn ~]# echo $site |sed 's/\..*//'
www
平时习惯了用cut的,也可以用下面的命令获取:
[root@www.lutixia.cn ~]# site=www.lutixia.cn
[root@www.lutixia.cn ~]# echo $site | cut -d. -f1
www
方法很多,相比之下,还是第一种简单明了,不需要引用其他命令实现。