2011-01-20 19 views

Trả lời

22

Không cần expr, POSIX vỏ phép $(()) để đánh giá số học:

echo $((x+1)) 

Xem §2.6.4

1

thử echo $ (($ x + 1))

Tôi nghĩ rằng chỉ hoạt động trên một số phiên bản của bash đó là 3 hoặc nhiều hơn ..

echo `expr $x + 1` 

sẽ là một giải pháp

+0

Như đã đề cập trong câu trả lời của tôi, '$ (())' thực sự là POSIX tuân thủ, không phải là một bash'ism. – SiegeX

0

Chỉ cần sử dụng expr lệnh:

$ expr $x + 1 
8 
0

Chúng tôi sử dụng 012.cho rằng:

echo `expr $x + 1` 
0

Hãy thử cách này:

echo $(($X + 1)) 
3

Hãy thử đôi dấu ngoặc đơn:

$ x=7; echo $(($x + 1)) 
8 
0
$ echo $(($x+1)) 
8 

Từ man bash:

Arithmetic Expansion

mở rộng số học cho phép việc đánh giá một biểu thức số học và sự thay thế của kết quả. Định dạng để mở rộng số học là:

$((expression)) 

Khái niệm được xử lý như thể nó là trong đôi dấu ngoặc kép, nhưng một dấu nháy kép bên trong dấu ngoặc đơn không phải là điều trị đặc biệt. Tất cả các thẻ trong biểu thức trải qua việc mở rộng thông số , mở rộng chuỗi, thay thế lệnh, và xóa báo giá. Thay thế số học có thể được lồng nhau.

Việc đánh giá được thực hiện theo các quy tắc được liệt kê bên dưới theo ĐÁNH GIÁ ARITHMETIC. Nếu biểu thức là không hợp lệ, dấu gạch ngang in thông báo cho biết lỗi và không xảy ra thay đổi .

+2

Không cần tiền tố vars với '$' bên trong '(())' – SiegeX

3

Bạn cũng có thể sử dụng tiện ích bc:

$ x=3; 
$ echo "$x+5.5" | bc 
8.5 
+0

+1 cho bc !!!!! –

Các vấn đề liên quan