字符串操作
最后更新于:2022-04-02 03:53:14
[TOC]
## 字符串的长度
```
$ foo=123234234
$ echo {$#foo}
9
```
## 子字符串
语法`${varname:offset:length}`
```
$ count=frogfootman
$ echo ${count:4:4}
foot
$ echo ${foo: -5} // offset 可为负,此时需加空格
# 报错
$ echo ${"hello":2:3}
```
## 搜索和替换
### 搜索
```
# 首部匹配,删除最短匹配(非贪婪匹配)的部分,返回剩余部分
${variable#pattern}
# 首部匹配,删除最长匹配(贪婪匹配)的部分,返回剩余部分
${variable##pattern}
# 尾部匹配删除最短匹配(非贪婪匹配)的部分,返回剩余部分
${variable%pattern}
# 首部匹配,删除最长匹配(贪婪匹配)的部分,返回剩余部分
${variable%%pattern}
# 任意位置匹配,最长匹配(贪婪匹配)的那部分被 string 替换,但仅替换第一个匹配
${variable/pattern/string}
# 任意位置匹配,最长匹配(贪婪匹配)的那部分被 string 替换,所有匹配都替换
${variable//pattern/string}
```
过滤路径,保留文件名
```
$ path=/home/cam/book/long.file.name
$ echo ${path##*/}
long.file.name
```
保留路径
```
$ echo ${path%%.*}
/home/cam/book/long
```
修改后缀
```
$ file=foo.png
$ echo ${file%.png}.jpg
foo.jpg
```
### 替换
```
${variable/#pattern/string}
# 示例
$ foo=JPG.JPG
$ echo ${foo/#JPG/jpg}
jpg.JPG
```
## 改变大小写
```
# 转为大写
${varname^^}
# 转为小写
${varname,,}
```
';