Bash 值对于基值太大(错误标记为“0925”)

Bash 值对于基值太大(错误标记为“0925”),bash,ubuntu,octal,Bash,Ubuntu,Octal,我的bash脚本中有以下逻辑: #!/bin/bash local_time=$(date +%H%M) if (( ( local_time > 1430 && local_time < 2230 ) || ( local_time > 0300 && local_time < 0430 ) )); then # do something fi #/bin/bash 本地时间=$(日期+%H%M) 如果((本地时间>1430和本地

我的bash脚本中有以下逻辑:

#!/bin/bash
local_time=$(date +%H%M)

if (( ( local_time > 1430  && local_time < 2230 ) || ( local_time > 0300 && local_time < 0430 ) )); then
 # do something
fi
#/bin/bash
本地时间=$(日期+%H%M)
如果((本地时间>1430和本地时间<2230)本地时间>0300和本地时间<0430));然后
#做点什么
fi
偶尔,我会收到标题中指定的错误(任何时候
08xx
出现都会触发错误)

有没有关于如何解决这个问题的建议

我在Ubuntu 10.04 LTS上运行

[编辑]

我按照SiegeX的建议修改了脚本,现在,我得到了错误:
[:10#0910:integer expression expected


有什么帮助吗?

bash
将您的数字视为八进制,因为前导零

manbash
前导为0的常量为 解释为八进制数 前导0x或0x表示十六进制。 否则,数字的形式为[base#]n,其中base是十进制数 介于2和64之间的数字表示- n是算术基数中的一个数字。如果base#是 省略,则使用基数10

若要修复它,请指定base-10前缀

#!/bin/bash
local_time="10#$(date +%H%M)"

if (( ( local_time > 1430  && local_time < 2230 ) || ( local_time > 0300 && local_time < 0430 ) )); then
 # do something
fi
!/bin/bash
本地时间=“10#$(日期+%H%M)”
如果((本地时间>1430和本地时间<2230)本地时间>0300和本地时间<0430)),则
#做点什么
fi
遵循来自的建议,此方法有效:

#!/bin/bash
local_time=`date +%H%M`
local_time="$(( 10#$local_time ))"

if (( ( local_time > 1430  && local_time < 2230 ) || ( local_time > 0300 && local_time < 0430 ) )); then
    echo "it is time!"
fi
!/bin/bash
本地时间=`date+%H%M`
本地时间=“$((10#$本地时间))”
如果((本地时间>1430和本地时间<2230)本地时间>0300和本地时间<0430)),则
回声:“是时候了!”
fi
在条件测试中解决问题 出于各种原因(例如文件命名问题),可能会强制保持变量不变。如果是这种情况,请通过明确指定base来解决条件测试中的问题:

!/bin/bash
本地时间=$(日期+%H%M)
如果((10#{当地时间}>1430和&10#{当地时间}<2230)和(10#{当地时间}>0300和&10#{当地时间}<0430)),则
#做点什么
fi

我按照您的建议修改了脚本,并在几分钟前运行了它,收到了以下错误:[:10#0910:integer expressionexpected@oompah:hmm,在此处或在所列的ideone上运行时没有错误。您使用的是哪个版本的
bash
?我的bash版本详细信息是:GNU bash,版本4.1.5(1)-发行版(x86_64-pc-linux-gnu)@oompa:我不知道该告诉你什么。你是否准确地复制并粘贴了我的代码并尝试运行它?用一个简单的
echo foo
替换
#do something
,以确保它不是你没有粘贴的代码。谢谢。我对
$f
变量使用了
10$f
,效果很好。