Bash脚本中字符串去除前导零失效,交互Shell中正常
问题原因与解决办法
问题出在Bash的extglob扩展默认状态差异:
- 交互模式下的Bash会默认启用
extglob扩展,它支持+(pattern)这类扩展通配语法,所以${id##+(0)}能正确匹配并删除所有前导零。 - 脚本模式下的Bash默认关闭了
extglob,此时+(0)会被当作普通字符串处理,无法匹配前导零,因此输出原字符串。
解决方法1:启用extglob扩展
在脚本开头添加shopt -s extglob命令开启扩展通配支持,修改后的脚本如下:
#!/bin/bash shopt -s extglob id="00902" echo ${id##+(0)}
解决方法2:不依赖extglob的替代方案
如果不想启用extglob,也可以用正则匹配实现前导零去除:
- 用sed工具:
#!/bin/bash id="00902" echo "$id" | sed 's/^0*//'
- 纯Bash正则匹配:
#!/bin/bash id="00902" [[ $id =~ ^0*(.*) ]] && echo "${BASH_REMATCH[1]}"
内容的提问来源于stack exchange,提问作者Ealrann
相关产品推荐
相关产品推荐

