Se você estiver usando a sintaxe $xxx
, a variável será expandida e o resultado será avaliado como uma expressão aritmética.
Então,
y=$((${oldvalue[$x]}-${newvalue[$x]}))
Torna-se
y=$((-4144290000--4009685000))
e ksh
reclamam do operador --
inesperado.
Você pode contorná-lo adicionando espaços conforme descobriu, e nesse caso ele se torna:
y=$((-4144290000 - -4009685000))
Mas você também pode escrever:
y=$((oldvalue[$x]-newvalue[$x])))
Nesse caso, o conteúdo da variável é expandido como parte da avaliação aritmética e, nesse caso, como um valor numérico.
O diferente se torna ainda mais importante em casos como:
a=1+1 b=2
echo "$((a*b)) vs $(($a*$b))"
O que dá 4 vs 3
e aponta para um terceiro e mais robusto do que a primeira maneira de contornar o problema:
y=$(((${oldvalue[$x]}) - (${newvalue[$x]})))