bash
không thể xử lý số học không nguyên. Nó sẽ cho bạn kết quả chính xác miễn là tất cả các biểu thức là số nguyên. Vì vậy, bạn cần tránh nhận được một giá trị không nguyên ở đâu đó trong tính toán của bạn.
Trong trường hợp của bạn, khi bạn đang đánh giá 1 / 5
, 2 / 5
v.v. , nó tạo ra các giá trị 0 nguyên trong các tương ứng bash với một số giá trị không nguyên và kết quả sẽ được đưa ra bằng 0. Ưu tiên của phép chia và phép nhân là các toán tử có cùng mức ưu tiên giống nhau luôn được thực hiện từ trái sang phải khi chúng được đặt trong biểu thức.
Một công việc xung quanh sẽ là thực hiện phép nhân trước và sau đó là phép chia để bash không bao giờ phải xử lý giá trị không nguyên. Biểu thức đã sửa sẽ là,
$ 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