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
这就是问题所在,因为我需要在前面加上前导零才能输出 from
和 to
之间的值
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
或者,您可以删除前导零,或将数字填充为相等长度并作为字符串进行比较。
我有一个脚本可以根据用户指定的 GMT 时间收集文件列表。例如,[从:0900 到:1200]。问题是首先我将用户输入的数字(八进制)转换为十进制。这样做后,前面的零将被截断。下面是我的代码。
from1="0900"
from=$((10#$from1)); #Converting from Octal to Decimal
to1="1200"
to=$((10#$to1)); #Converting from Octal to Decimal
来自的输出:900
这就是问题所在,因为我需要在前面加上前导零才能输出 from
和 to
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
或者,您可以删除前导零,或将数字填充为相等长度并作为字符串进行比较。