Số học Bash
Một giải pháp khả thi khác là thêm một hàm đơn giản cho số học dựng sẵn của Bash. Đặt cái này trong .bashrctập tin của bạn để thử:
=() {
echo "$(($@))"
}
Vì vậy, bây giờ, bạn thậm chí không cần $((...))nữa, =điều đó dường như đủ tự nhiên.
Thay thế
Một điều nữa nếu bạn muốn nhanh hơn nữa: bạn có thể làm cho nó thay thế pbằng +và xbằng *. Điều này sẽ làm việc cho điều đó:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
echo "$(($calc))"
}
= 5 x 5 # Returns 25
= 50p25 # Returns 75
Bây giờ bạn thậm chí không cần Shiftnữa, điều duy nhất là = ở phía trước của số học.
Đầu ra thập lục phân
Đầu ra có thể được hiển thị ở cả thập phân và thập lục phân, nếu muốn. ( Lưu ý : sử dụng xthay thế sẽ xung đột với 0x...cú pháp hex)
=() {
local answer="$(($@))"
printf '%d (%#x)\n' "$answer" "$answer"
}
Thí dụ:
$ = 16 + 0x10
272 (0x110)
$ = 16**3 + 16**4
69632 (0x11000)
Sử dụng bc
Nếu bạn muốn tính toán nâng cao hơn một chút, bạn có thể chuyển nó thành bcnhư sau:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
bc -l <<<"scale=10;$calc"
}
= 'sqrt(2)' # Returns 1.4142135623
= '4*a(1)' # Returns pi (3.1415926532)
Các chức năng được cung cấp bởi bcnhư sau (và có thể được tìm thấy từ man bc):
sqrt ( expression )
The value of the sqrt function is the square root of the expression.
If the expression is negative, a run time error is generated.
s (x) The sine of x, x is in radians.
c (x) The cosine of x, x is in radians.
a (x) The arctangent of x, arctangent returns radians.
l (x) The natural logarithm of x.
e (x) The exponential function of raising e to the value x.
j (n,x)
The Bessel function of integer order n of x.
Nó cũng hỗ trợ if, for, whilevà các biến giống như một ngôn ngữ lập trình tuy nhiên nếu nó có thể tốt hơn để viết vào một tập tin nếu bạn muốn đó.
Hãy nhớ rằng nó sẽ thay thế pvà xtrong tên hàm / biến. Nó có thể tốt hơn để chỉ cần loại bỏ thay thế.
Sử dụng gcalccmd
Bạn cũng có thể thực hiện chức năng gọi gcalccmd(từ gnome-calculator) như vậy:
=() {
local IFS=' '
local calc="$*"
# Uncomment the below for (p → +) and (x → *)
#calc="${calc//p/+}"
#calc="${calc//x/*}"
printf '%s\n quit' "$calc" | gcalccmd | sed 's:^> ::g'
}
= 'sqrt(2)' # Returns 1.4142135623
= '4^4' # Returns 256
Các chức năng có sẵn dường như (được lấy thẳng từ mã nguồn ), ==biểu thị các chức năng tương đương:
ln()
sqrt()
abs()
int()
frac()
sin()
cos()
tan()
sin⁻¹() == asin()
cos⁻¹() == acos()
tan⁻¹() == atan()
sinh()
cosh()
tanh()
sinh⁻¹() == asinh()
cosh⁻¹() == acosh()
tanh⁻¹() == atanh()
ones()
twos()