Forgetful Alann

In youth we learn, in age we understand.

0%

字符串操作

字符串长度


获取字符串长度:

1
echo ${#varname}

子字符串


截取子字符串:

1
${varname:offset:length}
  • offset: 其实索引,从 0 开始,如果为负值则表示从结尾开始,注意负值必须在负号前增加空格,否则和${name:-value} 冲突,负值正确写法:${name: -6}
  • length: 截取的长度,不指定则截取到末尾,length 可以为负,如果为负,则表示排除末尾的字符,如 -2 表示排除结尾 2 个字符

例如:

1
2
3
name=zhuyilong
echo ${name:3:6} // yilong
echo ${name:3} // yilong

该语法不能直接操作字符串,错误示例:${"zhuyilong":3:6}

搜索和替换


Bash 提供的字符串搜索和替换方法:

字符串头部模式匹配

从头部开始匹配,返回匹配之外的部分,分为贪婪匹配非贪婪匹配两种:

1
2
3
4
5
6
# 非贪婪匹配,匹配最短部分,返回剩余部分
${var#word}
# 贪婪匹配,匹配最长部分,返回剩余部分
${var##word}
# 匹配后替换
${var/#word/new_word}

其中的 word 可取 *, ?, [] 等通配符。

字符串尾部模式匹配

从尾部开始匹配,返回剩余的部分:

1
2
3
4
5
6
# 非贪婪匹配,返回剩余部分
${var%word}
# 贪婪匹配,返回剩余部分
${var%%word}
# 替换尾部的内容
${var/%word/new_word}

任意位置匹配替换

1
2
3
4
# 贪婪匹配替换,仅替换第一个匹配
${var/word/new_word}
# 贪婪匹配替换,替换所有的匹配
${var//word/new_word}

改变大小写

语法:

1
2
3
4
# 转为大写
${var^^}
#转为小写
${var,,}