Use bc
ou awk
ou um shell com suporte a ponto flutuante como ksh93
, zsh
ou yash
em vez de bash
.
bc
$ bc -l << \EOF
heredoc> for (i = 0; i <= 10; i += 2.5) i / 2
heredoc> EOF
0
1.25000000000000000000
2.50000000000000000000
3.75000000000000000000
5.00000000000000000000
awk
$ awk 'BEGIN {for (i = 0; i <= 10; i += 2.5) print i / 2}'
0
1.25
2.5
3.75
5
zsh
$ float i; for ((i = 0; i <= 10; i += 2.5)) print $((i/2))
0.
1.25
2.5
3.75
5.
ksh93
$ for ((i = 0; i <= 10; i += 2.5)); do print "$((i/2))"; done
0
1.25
2
3.75
5
(cuidado com o separador decimal é dependente de localidade ( .
ou ,
).
yash
i=0; while [ "$((i <= 10))" -ne 0 ]; do
echo "$((i / 2))"
i=$((i + 2.5))
done
(dentro de $((...))
você usa .
como o separador decimal, mas na E / S, o código do código do idioma ( .
ou ,
) é usado).
Editar
agora, se você quiser apenas fazer um loop em alguns inteiros e esses números inteiros serem representados com um ponto decimal neles, basta acrescentar um .0
:
for i in {0..10..5}.0
Ou, para as soluções acima, use printf "%.7f\n"
em vez de print
/ echo
para gerar os números com 7 dígitos após o separador decimal.