Parece que você encontrou um bug no ksh93.
Eu posso reproduzi-lo (ksh93u +) com:
$ x= ksh -c '[[ 0*1 -eq 5 ]]'
ksh: *1: arithmetic syntax error
Tudo bem com:
ksh -c '[[ " 0*1" -eq 5 ]]'
embora. E parece que foi corrigido em ksh93v-
(beta) porque não consigo reproduzi-lo lá.
De qualquer forma, eu usaria:
if ((f_count * sleep_interval % alarm_interval == 0 && f_count > 0)); then
Algumas notas:
- dentro de
[[...]]
,>
é para comparação de cadeia (em que10
é menor que 2 e, dependendo da localidade,-1
pode ser maior que 0). Use-gt
para comparação numérica (embora seja melhor usar((...))
). -
evite expandir variáveis dentro de expressões aritméticas, como em, use
x
em vez de$x
. Por exemplo, compare:$ x=-1 ksh -c '((-$x > 0))' ksh: --1 > 0: assignment requires lvalue
com
$ x=-1 ksh -c '((-x > 0))' $
Ou:
$ x=1+1 ksh -c 'echo "$(($x * 2)) $((x * 2))"' 3 4