字符串按长度截取
参数扩展可以实现变量值的截取,介绍如下。
对于需要将变量按长度截取的需求,可以使用该功能。
格式:
${var:m:n}
解释:
var表示变量名称,
m表示截掉前面m位字符,返回剩余部分,
m>=0 时表示从左往右数,
m<0 时表示从右往左数,
n>=0 表示剩余部分再从左往右取n个字符,返回最终值。
n<0 表示剩余部分再从右往左截n个字符,返回最终值。
特别说明:由于:-这个符号已经被默认值替代(详见《变量默认值设置》)所以当m、n为负值时需要:后面加上空格再写负号,以示区别,或者用一个数学表达式替代。
简化情况:
当m为0是即表示不删除前面的字符,可以省略,但冒号不可省略,简写如下
${var::n}
当不带n时,表示取出前m位后,保留后面全部,简化如下
${var:m}
当m为负值时,表示从倒数第m位,删除前面的全部内容,保留后面全部。
样例
a="abcdefg"
# 删除变量中前n个字符,格式:${var:n}
echo ${a:2} # 结果是:cdefg
# 保留变量中前n个字符,格式:${var:0:n} 或者简写为${var::n}
echo ${a:0:2} # 结果是ab
echo ${a::2} # 结果也是ab
# 保留变量后后n个字符,格式${var: -n} 或者${var:0-n}
echo ${a: -2} #结果是fg 其实这个后面的数字-2用任何数字减出来都行,如下
echo ${a:98-100}
# 去掉前m个字符同时去掉后面n个字符
echo ${a:2: -2} # 结果cde
字符串按分割符号截取
格式:
${var 分割方向符号 分割字符}
解释:
分割方向符号:包含2个,%和#
%表示从右往左删除,%的个数代表删除后面几部分
#表示从左往右删除,#的个数代表删除前面几部分
分割字符:表示使用什么分割
样例
a="www.baidu.com"
# 删除前面的www.bai
echo ${a#www.bai} # 返回du.com
# 以.为分割符号,删除前面第一部分
echo ${a#*.} # 返回baidu.com 解释 *代表前面任意字符,.代表分割符号,如果不带*只判断开头一致的部分
# 以.为分割符号,删除前面两部分
echo ${a##*.} # 返回com
# 删除du.com
echo ${a%du.com} # 返回www.bai
# 以.为分割符号,删除后面第一部分
echo ${a%.*} # 返回www.baidu
# 以.为分割符号,删除后面2部分
echo ${a%%.*} # 返回www