测试字符串:str=/xxx/file.txt.gz
一、长度、变量:
说明 | 表达式 | 例子 | 结果 |
获取长度 | ${#string} | ${#str} | 16 |
列出所有以prefix开头的变量 | ${!prefix*}、${!prefix@} | ${!st@} | str |
str111=/xxx/file.txt.gz
str222=/xxx/file.txt.gz
echo ${!str@} #结果:str111 str222
echo ${!str*} #结果:str111 str222
说明 | 表达式 | 例子 | 结果 |
从position(从0开始,负表示倒数,下同)开始截取 | ${string:position} | ${str:1} | xxx/file.txt.gz |
position开始截取,取length长 | ${string:position:length} | ${str:1:3} | xxx |
从第index(从1开始)开始,取number个 | `expr substr $string index number` | `expr substr $str 2 3` | xxx |
从左边开始,删最短匹配regex | ${string#regex } | ${str#*.} | txt.gz |
从左边开始,删最长匹配regex | ${string##regex } | ${str##*.} | gz |
从右边开始,删最长匹配regex | ${string%%regex } | ${str%%.*} | /xxx/file |
从右边开始,删最短匹配regex | ${string%regex } | ${str%.*} | /xxx/file.txt |
删除操作很有用:比如取目录、文件名、后缀等
dir=${str%/*} 在绝对路径str取目录
filename=${str##*/} 取文件名
suffix=${str##*.} 取后缀
很方便、很简洁,有木有~~~~
三、匹配
说明 | 表达式 | 例子 | 结果 |
从头匹配substring | `expr match $string '\(substring\)'` | `expr match $str '\(/xx\)'` | /xx |
随便位置匹配substring | `expr match $string '.*\(substring/\)'` | `expr match $str '.*\(xx/\)'` | xx/ |
从头匹配substring,输出匹配数量 | `expr match $string 'substring'` | `expr match $str '/xx'` | 3 |
随便位置匹配substring,输出匹配数量 | `expr match $ string '.* 'substring''` | `expr match $str '.*xx/'` | 5 |
四、替换
说明 | 表达式 | 例子 | 结果 |
在string中,用newsubstr替换oldsubstr一次 | ${string/oldsubstr/newsubstr} | ${str/./-} | /xxx/file-txt.gz |
在string中,用newsubstr替换所有oldsubstr | ${string//oldsubstr/newsubstr} | ${str//./-} | /xxx/file-txt-gz |
在string中,以oldsubstr开头部分被newsubstr替换 | ${string/#oldsubstr/newsubstr} | ${str/#\/x/y} | yxx/file.txt.gz |
在string中,以oldsubstr结尾部分被newsubstr替换 | ${string/%oldsubstr/newsubstr} | ${str/%gz/tar} | /xxx/file.txt.tar |