因此,我只是尝试运行一项检查,删除小于或等于当前时间 3 小时的文件夹,但出现“预期的整数表达式”错误。
if [ ${currentFileHour[$i]}+3 -le 19 ]
如果我用 javascript 写它作为一个简单的例子,那就是
if(5 + 6 <= 10){
console.log('yes')
}
答案1
bash 有一个算术条件结构(参见条件结构在手册中)
if (( "${currentFileHour[$i]}" + 3 <= 19 )); then ...
在 bash 的算术上下文中,您可以省略$
,对于数组元素来说,它看起来像:
if (( currentFileHour[$i] + 3 <= 19 )); then ...
假设这是一个索引数组,索引是算术索引,所以
if (( currentFileHour[i] + 3 <= 19 )); then ...
演示:
$ i=10
$ currentFileHour[i]=16
$ if (( currentFileHour[i] + 3 <= 19 )); then echo yes; fi
yes
关于小时(以及分钟和秒等)需要注意的一件事是无效的八进制数:
$ currentFileHour[i]="08"
$ if (( currentFileHour[i] + 3 <= 19 )); then echo yes; fi
bash: ((: 08: value too great for base (error token is "08")
前导零使 bash 认为您需要八进制。
为了解决这个问题:
- 对于该
date
命令,使用%_H
which 填充空格而不是零,或者%-H
which 不填充单位数小时,或者 - 告诉 bash 算术它是一个以 10 为底的数字,带有“10#”前缀(
$
在本例中需要)$ if (( 10#${currentFileHour[i]} + 3 <= 19 )); then echo yes; fi yes