我有一个脚本,收集的文件列表的基础上,用户在格林尼治标准时间给出的时间。例如,从: 0900到: 1200。问题是,首先我将用户输入的数字(八进制)转换为十进制。执行此操作后,前面的零将被截断。下面是我的代码。
from1="0900"
from=$((10#$from1)); #Converting from Octal to Decimal
to1="1200"
to=$((10#$to1)); #Converting from Octal to Decimalfrom:900的输出
这就是问题出现的地方,因为为了输出from和to之间的值,我需要在前面加上前导零
if [[ $from -le $val && $val -le $to ]]
then
echo $val >> some_output.txt
fi因为from的值是900而不是0900,所以上面的代码段不会被触发。
我如何解决这个问题?在if语句内部进行比较时,有没有办法在前面加上前导零?
谢谢。
发布于 2021-03-23 23:38:08
如果您希望将数字视为小数,而不考虑前导零,则可以在Bash中添加10#前缀(如果有负数,则需要在减号之后)。
这是打印
901 is between 0900 and 1200
1101 is between 0900 and 1200#!/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或者,您可以删除前导零,或者将数字填充到相同的长度,然后作为字符串进行比较。
https://stackoverflow.com/questions/66765731
复制相似问题