获取字符串的长度
${#变量名} #如果变量未被赋值或者值是空字符则返回0
#!/bin/bash
str='this is string' #使用带引号不会将${}展开而是直接输出,使用双引号会展开,如'this is string ${name}'会直接输出 this is string ${name}
echo ${#str} # 14
字符串的截取
${变量名:数值} # 要展开的是"变量名"代表的字符串从"数值"所指向的位置开始到末尾位置,数值是从0开始计数的,这个"数值"可以为负数,但是在不同shell版本上是有差异的,比如我的shell (5.1) 负数是无效的
${变量名:数值:长度} #从"数值"处开始截取"长度"个字符串
#!/bin/bash
str='this is string'
echo ${str:4} # is string
echo ${str:5:2} # is
使用匹配模式进行截取
${变量名#模式} #从左向右,将(最短)匹配部分截取
${变量名##模式} #从左向右,将(最长)匹配部分截取
${变量名%模式} #从右向左,将(最短)匹配部分截取
${变量名%%模式} #从右向左,将(最长)匹配部分截取
#!/bin/bash
path=home.tag.gz
echo ${path#*.} # tag.gz
echo ${path##*.} #gz
echo ${path%.*} # home.tag
echo ${path%%.*} #home
字符串替换
${变量名/模式/替换的字符串} #只会替换第一个匹配的
${变量名//模式/替换的字符串} #替换第所有匹配的
#!/bin/bash
path=home.tag.gz
echo ${path/./_} # home_tag.gz
echo ${path//./_} # home_tag_gz
echo ${path/.*/.txt} # home.txt
file=index.html
echo ${file/%.html/.txt} # index.txt
网友评论