加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

仅使用bash子字符串删除去除前导零

发布时间:2020-12-15 22:29:06 所属栏目:安全 来源:网络整理
导读:我知道其他解决这个问题的方法(我目前正在使用’expr’方法),但是我不知道如何只使用bash内置函数来解决这个问题. 当我尝试使用${variable ## remove}构造从变量中去除前导零时,我可以只获取它来删除一个零或全部数字. string="00123456"echo "${string##0}"
我知道其他解决这个问题的方法(我目前正在使用’expr’方法),但是我不知道如何只使用bash内置函数来解决这个问题.

当我尝试使用${variable ## remove}构造从变量中去除前导零时,我可以只获取它来删除一个零或全部数字.

string="00123456"
echo "${string##0}" // Only the first 0 is removed
echo "${string##0*0}" // The whole string is removed
echo "${string#0*0}" // Works

string="01230"
echo "${string##0}" // Works
echo "${string##0*0}" // The whole string is removed
echo "${string#0*0}" // Again,the whole string is removed

我读了两次bash手册,看看我是否正确地做了,但官方文档充其量是稀疏的.我知道启用extglob也可以解决这个问题,但对于像这样简单的问题来说似乎有点过头了.

我是否遗漏了一些明显的东西,或者仅使用bash函数从字符串中删除一个或多个前导零真的很难?

解决方法

以下将删除字符串中的所有前导0:

$string="000123456000"
$echo "${string#"${string%%[!0]*}"}"
123456000

说“${string %% [!0] *}”会在删除满足[!0] *的字符串的最长尾部之后返回匹配 – 基本上在开头返回零.

“${string#”${string %% [!0] *}“}”将从字符串的开头删除上面返回的部分.

或者,您可以使用shell算法:

$string="0000123456000"
$echo $((10#$string))
123456000

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读