2012-06-29 44 views
19

Tôi có d1="11"d2="07". Tôi muốn chuyển đổi d1d2 thành số nguyên và thực hiện d1-d2. Làm thế nào để làm điều này trong UNIX?Cách chuyển đổi chuỗi thành số nguyên trong UNIX

d1 - d2 hiện trả về "11-07" là kết quả của tôi.

+3

Bạn có muốn điều này từ dòng lệnh hoặc theo chương trình không? – Levon

Trả lời

33

Các giải pháp tiêu chuẩn:

expr $d1 - $d2 

Bạn cũng có thể làm:

echo $((d1 - d2)) 

nhưng hãy cẩn thận rằng điều này sẽ đối xử với 07 như một số bát phân! (như vậy 07 giống với 7, nhưng 010 khác với 10).

+1

Cho rằng bash có cú pháp để xác định số cơ sở, tại sao không thể hiện nó ở đây (mặc dù với một caveat di động)? –

+1

Bạn có thể chuyển đổi cơ sở: 'echo $ ((d1-10 # $ d2))' Hãy coi chừng: nó không giống với 'echo $ ((d1-10 # d2))' – Luchostein

-4

Sử dụng này:

#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    const char *d1 = "11"; 
    int d1int = atoi(d1); 
    printf("d1 = %d\n", d1); 
    return 0; 
} 

, vv

+2

qwarentine có nghĩa là vỏ Linux. –

+0

Câu hỏi dành cho vỏ unix – rashok

14

Bất kỳ trong số này sẽ làm việc từ dòng lệnh shell. bc có lẽ là giải pháp chuyển tiếp thẳng thắn nhất của bạn.

Sử dụng bc:

$ echo "$d1 - $d2" | bc 

Sử dụng awk:

$ echo $d1 $d2 | awk '{print $1 - $2}' 

Sử dụng perl:

$ perl -E "say $d1 - $d2" 

Sử dụng Python:

$ python -c "print $d1 - $d2" 

tất cả trở

4 
+1

Không chắc chắn nếu đó là lỗi hoặc tính năng của 'expr',' awk', 'bc' và' dc', nhưng tất cả các công cụ đó xử lý trường hợp 'd1 = 09' bằng cách xử lý 09 là giá trị thập phân 9. Tuy nhiên, 'perl' và' python' coi nó là lỗi cú pháp. Bạn nhận được kết quả khác nhau cho trường hợp 'd1 = 010' –

+0

@WilliamPursell Thú vị .. Tôi sẽ phải xem xét thông tin hữu ích này, cảm ơn. – Levon

+1

Bạn có thể làm điều đó ngay lập tức với Bash thuần túy: 'echo $ ((d1-10 # $ d2))' – Luchostein

0
let d=d1-d2;echo $d; 

Điều này sẽ hữu ích.

+0

Điều này có hiệu quả giống nhau như 'd = $ ((d1 - d2)); echo "$ d" ', như được trả lời bởi câu trả lời được chấp nhận (với cùng một lời cảnh báo rằng các số có tiền tố' 0' được hiểu là _octals_). – mklement0

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