そのため、現在時刻から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
時間(および分、秒など)に注意することは、無効な8進数です。
$ currentFileHour[i]="08"
$ if (( currentFileHour[i] + 3 <= 19 )); then echo yes; fi
bash: ((: 08: value too great for base (error token is "08")
前に0があると、bashはユーザーが8進数を望んでいると思います。
この問題を解決するには:
- この
date
コマンドでは、%_H
ゼロの代わりにスペースを埋める項目、%-H
時間を入力しない項目、またはwhichを使用します。 - bash 算術に "10#" 接頭辞 (
$
この場合は必須) があるデフォルトの 10 桁であることを通知します。$ if (( 10#${currentFileHour[i]} + 3 <= 19 )); then echo yes; fi yes