Shell 字符串操作

获取字符串的长度

${#变量名} #如果变量未被赋值或者值是空字符则返回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

你可能感兴趣的:(Shell 字符串操作)