Câu trả lời:
Trong ví dụ đầu tiên của bạn, $((X+1))
đánh giá biểu thức X + 1 và mở rộng đến kết quả, sau đó được gán cho biến.
Trong ví dụ thứ hai, $((X=X+1))
tăng X
theo một ( $((X++))
cũng hợp lệ và ngắn hơn, nhưng không nhất thiết phải được hỗ trợ bởi shell), sau đó mở rộng sang giá trị mới $X
, là đối số đầu tiên cho lệnh null , :
. Lệnh null bỏ qua các đối số của nó và kết quả bị loại bỏ (với các tác dụng phụ).
Cá nhân tôi thích hình thức đầu tiên vì ba lý do (tương đối chủ quan):
Bạn sẽ phải sử dụng phiên bản đầu tiên nếu bạn sửa đổi môi trường chỉ bằng một lệnh như
X=$((X+1)) /usr/local/bin/something
Bạn sẽ phải sử dụng biểu mẫu thứ hai để thêm đánh giá trực tiếp vào các đối số:
ls -la "file-$((X++))" # or ...
ls -la "file-$((X=X+1))" # for better compatibility
Điều này có tác dụng phụ mong muốn, lưu một dòng và khá rõ ràng.