Bash 字符串截取与模式删除
Bash 参数展开可以截取字符串,或按通配符模式删除变量开头、结尾的内容。
示例变量:
value='https://www.example.com/path/file.html'从开头删除匹配内容
# 删除最短匹配:移除协议前缀
printf '%s\n' "${value#*//}"
# www.example.com/path/file.html
# 删除最长匹配:只保留最后一个斜杠后的内容
printf '%s\n' "${value##*/}"
# file.html${parameter#pattern}:删除开头最短匹配。${parameter##pattern}:删除开头最长匹配。
从结尾删除匹配内容
# 删除结尾最短匹配:移除最后一段路径
printf '%s\n' "${value%/*}"
# https://www.example.com/path
# 删除结尾最长匹配
printf '%s\n' "${valuepattern}`:删除结尾最长匹配。
## 按位置截取
```bash
text='HelloWorld'
# 从索引 3 开始直到末尾
printf '%s\n' "${text:3}"
# loWorld
# 从索引 3 开始截取 4 个字符
printf '%s\n' "${text:3:4}"
# loWo
# 截取最后 3 个字符;负数前应保留空格
printf '%s\n' "${text: -3}"
# rld索引从 0 开始。${parameter: offset:length} 是 Bash 扩展,并非所有 POSIX Shell 都支持。
常用默认值展开
# 未设置或为空时使用默认值
result=${value:-default}
# 未设置或为空时赋值并返回该值
result=${value:=default}
# 已设置且非空时使用替代值
result=${value:+alternative}
# 未设置或为空时报错
result=${value:?'value is required'}不带冒号的 ${value-default} 只检查变量是否未设置;带冒号的 ${value:-default} 同时把空字符串视为需要使用默认值。