字符串长度
两个特殊用法
- 对于数组来说, ${#array[*]}和${#array[@]}表示数组中元素的个数
匹配字符串开头的子串长度
- expr match "$string" '$substring'
- expr "$string" : '$substring'
索引
- expr index $string $substring
提取子串
- ${string:position:length}
- expr substr $string $position $length
- expr match "$string" '\($substring\)'
- expr substr $string $position $length
- expr match "$string" '\($substring\)'
- expr "$string" : '\($substring\)'
- expr match "$string" '.*\($substring\)'
- expr "$string" : '.*\($substring\)'
- expr match "$string" '.*\($substring\)'
- expr "$string" : '.*\($substring\)'
子串削除
- ${string#substring} 从$string的开头位置截掉最短匹配的$substring
- ${string##substring} 从$string的开头位置截掉最长匹配的$substring
- ${string%substring} 从$string的结尾位置截掉最短匹配的$substring
- ${string%%substring} 从$string的结尾位置截掉最长匹配的$substring
子串替换
- ${string/substring/replacement} 使用$replacement来替换第一个匹配的$substring
- ${string//substring/replacement} 使用$replacement来替换所有匹配的$substring
- ${string/#substring/replacement} 如果$substring匹配$string的开头部分, 那么就用$replacement来替换$substring
- ${string/%substring/replacement} 如果$substring匹配$string的结尾部分, 那么就用$replacement来替换$substring
- ${!varprefix*}, ${!varprefix@} 匹配所有之前声明过的, 并且以varprefix开头的变量
xyz23=whatever
xyz24=
a=${!xyz*} # 展开所有以"xyz"开头的, 并且之前声明过的变量名.
通过变量间接引用
eval var1=\$var2
var1=var2
var2=3
eval var3=\$var1
echo $var3 # 3