Bash十进制格式前保留前导零

Bash retain leading zero in front of Decimal Number Format

我有一个脚本可以根据用户指定的 GMT 时间收集文件列表。例如,[从:0900 到:1200]。问题是首先我将用户输入的数字(八进制)转换为十进制。这样做后,前面的零将被截断。下面是我的代码。

from1="0900"
from=$((10#$from1)); #Converting from Octal to Decimal
to1="1200"
to=$((10#$to1)); #Converting from Octal to Decimal

来自的输出:900

这就是问题所在,因为我需要在前面加上前导零才能输出 fromto

之间的值
if [[ $from -le $val && $val -le $to ]]
then
     echo $val >> some_output.txt
fi

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

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

谢谢。

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

这会打印

901 is between 0900 and 1200
1101 is between 0900 and 1200
#!/bin/bash
between() {
        local val=
        local from=
        local to=
        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

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