【发布时间】:2021-06-20 06:13:56
【问题描述】:
我有一个脚本,它根据用户在 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
上面的 sn-p 不会被触发,因为 from 的值是 900 而不是 0900。
我该如何解决这个问题?在 if 语句中进行比较时,有没有办法在前面添加前导零?
谢谢。
【问题讨论】:
-
from=$((10#$from1));,这不会从八进制转换任何内容,它只是强制将数字解释为十进制。此外,0900甚至不是一个有效的八进制数。而且,您的用户以八进制输入数字?这听起来很古怪。你到底在做什么? -
@ilkkachu 前面的前导零是使它被解释为八进制的原因。用户输入
from和to值。为简单起见,我只是在上面的示例中分配了一些值。如上面的 if 语句所示,我希望它花费介于from和to之间的时间并将其附加到输出文件中。例如,如果文件包含[0850, 0910, 0950, 1020, 1040, 1100, 1300, 1500],则应将0910, 0950, 1020, 1040, 1100添加到输出文件中。截至目前,我不能这样做,因为 from 的值没有被正确解释。 -
将字符串转换为数字有什么原因吗?您不只是比较字符串的任何原因,例如
[[ ! "${from1}" > "${val}" && ! "${val}" > "${to1}" ]];或者,保留您的字符串和数字,使用数字进行比较,然后使用字符串进行后续处理...? -
@markp-fuso,我认为如果他们给
900而不是0900,那将会中断。 -
@ilkkachu ... 当然,所以 OP 需要添加一些额外的代码以确保所有值都用
0左填充,以及额外检查数字是否代表实际时间(即, '978` 无效)