shell变量字符串截取
假设有变量
url=http://www.baidu.com/index.html
<1>#号截取----删除左边的字符,保留右边的字符
[root@MiWiFi-R3-srv ~]# echo "${url#*//}" www.baidu.com/index.html
<2>##号截取----删除左边的字符,保留右边的字符
[root@MiWiFi-R3-srv ~]# echo "${url##*/}" index.html
---->#号截取和##号截取的区别:
可以看到上面的变量值并不是只有1个单一的字符,如字母(w,i等等).#和##的区别就是在这里
[root@MiWiFi-R3-srv ~]# url=http://www.baidu.com/index.html [root@MiWiFi-R3-srv ~]# echo "${url#*i}" du.com/index.html [root@MiWiFi-R3-srv ~]# echo "${url##*i}" ndex.html
"#"是从找到的第一个对象开始截取(从左往右数)
"##"是从找到的最后一个对象开始截取(从左往右数)
<3>%号截取----删除右边的字符,保留左边的字符
[root@MiWiFi-R3-srv ~]# echo "${url%i*}" http://www.baidu.com/
<4>%%号截取----删除右边的字符,保留左边的字符
[root@MiWiFi-R3-srv ~]# echo "${url%%i*}" http://www.ba
---->注意:
注意运算符"*"的位置
注意"%"也是从找到的第一个对象开始截取。但是顺序是从右向左查找的
注意"%%"也是从找到的最后一个对象开始截取。但是顺序是从右向左查找的
<5>从左边第几个字符开始,及字符的个数
[root@MiWiFi-R3-srv ~]# echo "${url:0:2}" ht
---->0表示的是开始位置,逻辑相当于Python的列表索引
[root@MiWiFi-R3-srv ~]# echo "${url:2}" tp://www.baidu.com/index.html
从索引位置到结尾
<6>从右边的第几个字符开始,及字符的个数
[root@MiWiFi-R3-srv ~]# echo "${url:0-4:4}" html
---->"0-4"表示从右向左第四个字符开始,"4"表示字符的个数(从左到右的)
[root@MiWiFi-R3-srv ~]# echo "${url:0-7}" ex.html
---->从"0-7"的位置到结尾