Vỏ
Các đơn giản nhất calc trong CLI là CLI (vỏ) bản thân (Nếu IFS
là mặc định):
$ echo $(( 22 + 333 ))
355
Không gian có thể được bỏ qua:
$ echo $((22*333))
7326
Vì nó là một phần của POSIX nên hầu hết các vỏ đều có nó. Và nó bao gồm hầu hết các chức năng toán học ngôn ngữ C (ngoại trừ zsh có quyền ưu tiên khác, đặt C_PRECEDENCES để khôi phục nó về giá trị tương thích):
$ echo $((22*333^2))
7324
Và một số shell có hầu hết cú pháp toán học ngôn ngữ C (bao gồm cả dấu phẩy):
$ echo $((a=22,b=333,c=a*b,c))
7326
Nhưng nó chỉ là toán học số nguyên (và thường ít hơn 2 63 trong các hệ điều hành ngày nay) trong một số hệ vỏ:
$ echo $((1234/3))
411
$ zsh -c 'echo $((2**63))'
-9223372036854775808
Một số shell có thể làm toán nổi:
$ ksh -c 'echo $((1234/3.0))'
411.333333333333333
$ ksh -c 'echo $((12345678901234567890123/3.0))'
4.11522630041152263e+21
Tránh zsh (zcalc có vấn đề tương tự):
$ zsh -c 'echo $((12345678901234567890123 + 1))'
zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1
-1363962815083169259
Tôi khuyên bạn nên tránh expr
, đôi khi nó cần những lối thoát kỳ lạ:
$ expr 22 \* 333
7326
bc
Ở cấp độ tiếp theo là ( cũng là POSIX ) bc
(anh em họ của RPN dc
)
$ echo '22*333' | bc
7326
$ echo '22 333 * p' | dc
7326
Đó dc
là POSIX nhưng đã bị gỡ bỏ vào năm 2017 .
Ngắn hơn nếu shell của bạn hỗ trợ nó:
$ bc <<<'22*333'
7326
Hoặc thậm chí:
$ <<<'22*333' bc
7326
Cả hai đều là máy tính chính xác tùy ý với một số hàm toán học bên trong:
$ bc <<<2^200
1606938044258990275541962092341162602522202993782792835301376
$ echo 's(3.1415/2)' | bc -l # sine function
.99999999892691403749
ôi
Sau những công cụ calc thực sự cơ bản đó , bạn cần phải đi đến các ngôn ngữ khác
$ awk "BEGIN {print (22*33)/7}"
103.714
$ perl -E "say 22*33/7"
103.714285714286
$ python3 -c "print(22*33/7)"
103.71428571428571
$ php -r 'echo 22*33/7,"\n";'
103.71428571429
chức năng
Bạn có thể xác định chức năng của bất kỳ tùy chọn nào ở trên:
c ()
{
local in="$(echo " $*" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
gawk -M -v PREC=201 -M 'BEGIN {printf("%.60g\n",'"${in-0}"')}' < /dev/null
}
Và sử dụng:
$ c 22* 33 /7 # spaces or not, it doesn't matter.
103.714285714285714285714285714285714285714285714285714285714
quit
vàobc
; nhấnctrl-D
sẽ làm, như nó sẽ trong bất kỳ chương trình tương tác.