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 .bashrc
tậ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ế p
bằng +
và x
bằ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 x
thay 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 bc
như 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 bc
như 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
, while
và 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ế p
và x
trong 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()