You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:25:24