如何在Shell脚本中移除字符串末尾的连字符与下划线(无需sed/awk)
移除字符串末尾连字符/下划线的Shell兼容方案
不需要依赖sed、awk这类外部工具,用POSIX标准的Shell参数扩展就能实现,所有Linux发行版的默认Shell(bash、dash、sh等)都支持。
实现方法
使用${变量名%%[-_]*}语法:
%%:删除变量值末尾最长匹配指定模式的内容[-_]*:匹配模式,[-_]代表字符集(包含-和_),*匹配该字符集的任意多个重复(会把末尾所有连续的-/_都匹配到)
示例代码
# 定义测试字符串 str1="test_-" str2="test-_-"" str3="test1__-" str4="---___" # 处理并输出结果 echo "${str1%%[-_]*}" # 输出 test echo "${str2%%[-_]*}" # 输出 test echo "${str3%%[-_]*}" # 输出 test1 echo "${str4%%[-_]*}" # 输出空字符串(全是目标字符的情况)
兼容性说明
这个语法是POSIX Shell的标准特性,所有符合POSIX规范的Shell环境都支持,覆盖了几乎所有Linux发行版的默认Shell,不需要额外安装任何工具,完全原生实现。
内容的提问来源于stack exchange,提问作者Rob Wilkinson
相关产品推荐
相关产品推荐

