bash
tidak dapat menangani aritmatika non-integer. Ini akan memberi Anda hasil yang benar selama semua ekspresi adalah bilangan bulat. Jadi, Anda perlu menghindari mendapatkan nilai non-integer di suatu tempat dalam perhitungan Anda.
Dalam kasus Anda, ketika Anda mengevaluasi 1 / 5
, 2 / 5
dll. Itu menciptakan nilai nol integer dalam bash korespondensi dengan beberapa nilai non-integer dan hasilnya keluar menjadi nol sesuai. Precedence of division dan multiplication adalah operator yang sama dan preseden yang sama selalu dieksekusi dari kiri ke kanan karena mereka ditempatkan dalam ekspresi.
Salah satu penyelesaiannya adalah melakukan perkalian terlebih dahulu dan kemudian pembagian sehingga bash tidak harus menangani nilai non-integer. Ekspresi yang dikoreksi adalah,
$ max=5; for e in $(seq 1 1 $max); do percent=$(( $e*100/$max )); echo "echo $e / $max : = $percent"; done
echo 1 / 5 : = 20
echo 2 / 5 : = 40
echo 3 / 5 : = 60
echo 4 / 5 : = 80
echo 5 / 5 : = 100