Tôi có d1="11"
và d2="07"
. Tôi muốn chuyển đổi d1
và d2
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.
Tôi có d1="11"
và d2="07"
. Tôi muốn chuyển đổi d1
và d2
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.
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
).
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)? –
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
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
qwarentine có nghĩa là vỏ Linux. –
Câu hỏi dành cho vỏ unix – rashok
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
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' –
@WilliamPursell Thú vị .. Tôi sẽ phải xem xét thông tin hữu ích này, cảm ơn. – Levon
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
let d=d1-d2;echo $d;
Điều này sẽ hữu ích.
Đ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
Bạn có muốn điều này từ dòng lệnh hoặc theo chương trình không? – Levon