Bash เลขคณิต
อีกวิธีที่เป็นไปได้คือการเพิ่มฟังก์ชั่นที่ง่ายสำหรับเลขคณิตในตัวของ Bash ใส่สิ่งนี้ลงใน.bashrc
ไฟล์ของคุณเพื่อลอง:
=() {
echo "$(($@))"
}
ดังนั้นตอนนี้คุณไม่ต้องการ$((...))
อีกต่อไป=
ซึ่งดูเหมือนเป็นธรรมชาติมากพอ
การแทนที่
อีกสิ่งหนึ่งที่ถ้าคุณต้องการที่จะทำงานได้เร็วขึ้น: คุณสามารถทำให้มันแทนที่p
ด้วย+
และมีx
*
สิ่งนี้จะได้ผลดังนี้:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
echo "$(($calc))"
}
= 5 x 5 # Returns 25
= 50p25 # Returns 75
ตอนนี้คุณไม่ต้องการShiftอีกต่อไปสิ่งเดียวที่อยู่=
ข้างหน้าเลขคณิต
เอาต์พุตเลขฐานสิบหก
เอาต์พุตสามารถแสดงได้ทั้งทศนิยมและเลขฐานสิบหกหากต้องการ ( หมายเหตุ : การใช้การx
แทนที่จะขัดแย้งกับ0x...
ไวยากรณ์ฐานสิบหก)
=() {
local answer="$(($@))"
printf '%d (%#x)\n' "$answer" "$answer"
}
ตัวอย่าง:
$ = 16 + 0x10
272 (0x110)
$ = 16**3 + 16**4
69632 (0x11000)
การใช้ bc
หากคุณต้องการการคำนวณขั้นสูงเพิ่มเติมเล็กน้อยคุณสามารถไปป์ไลน์ได้bc
เช่น:
=() {
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)
ฟังก์ชั่นที่จัดทำโดยbc
มีดังนี้ (และสามารถพบได้จาก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.
นอกจากนี้ยังสนับสนุนif
, for
, while
และตัวแปรเช่นภาษาการเขียนโปรแกรม แต่ถ้ามันอาจจะดีกว่าที่จะเขียนไปยังแฟ้มถ้าคุณต้องการที่
โปรดทราบว่ามันจะแทนที่p
และx
ในชื่อฟังก์ชัน / ตัวแปร อาจเป็นการดีกว่าที่จะลบการเปลี่ยน
การใช้ gcalccmd
นอกจากนี้คุณยังสามารถเรียกใช้ฟังก์ชันgcalccmd
(จากgnome-calculator
) ดังนี้:
=() {
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
ฟังก์ชั่นที่ใช้งานได้ดูเหมือนจะเป็น (นำมาโดยตรงจากซอร์สโค้ด ) ==
หมายถึงฟังก์ชั่นที่เทียบเท่า:
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()