首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash保留十进制数字格式前面的前导零

Bash保留十进制数字格式前面的前导零
EN

Stack Overflow用户
提问于 2021-03-23 22:57:37
回答 1查看 101关注 0票数 0

我有一个脚本,收集的文件列表的基础上,用户在格林尼治标准时间给出的时间。例如,从: 0900到: 1200。问题是,首先我将用户输入的数字(八进制)转换为十进制。执行此操作后,前面的零将被截断。下面是我的代码。

代码语言:javascript
复制
from1="0900"
from=$((10#$from1)); #Converting from Octal to Decimal
to1="1200"
to=$((10#$to1)); #Converting from Octal to Decimal

from:900的输出

这就是问题出现的地方,因为为了输出fromto之间的值,我需要在前面加上前导零

代码语言:javascript
复制
if [[ $from -le $val && $val -le $to ]]
then
     echo $val >> some_output.txt
fi

因为from的值是900而不是0900,所以上面的代码段不会被触发。

我如何解决这个问题?在if语句内部进行比较时,有没有办法在前面加上前导零?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-23 23:38:08

如果您希望将数字视为小数,而不考虑前导零,则可以在Bash中添加10#前缀(如果有负数,则需要在减号之后)。

这是打印

代码语言:javascript
复制
901 is between 0900 and 1200
1101 is between 0900 and 1200
代码语言:javascript
复制
#!/bin/bash
between() {
        local val=$1
        local from=$2
        local to=$3
        if [[ "10#$from" -le "10#$val" ]] && [[ "10#$val" -le "10#$to" ]]; then
                echo "$val is between $from and $to"
                return 0
        fi
        return 1
}

between  901 0900 1200
between  809 0900 1200
between 0809 0900 1200
between 1101 0900 1200
between 1300 0900 1200

或者,您可以删除前导零,或者将数字填充到相同的长度,然后作为字符串进行比较。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66765731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档