博主
发布于 2025-01-25 / 22 阅读 / 0 评论 / 0 点赞

02.字符串的操作

字符串按长度截取

参数扩展可以实现变量值的截取,介绍如下。

对于需要将变量按长度截取的需求,可以使用该功能。

格式:

${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


评论