เครื่องคำนวณบรรทัดคำสั่งใดสำหรับ Ubuntu?


119

ฉันกำลังมองหาเครื่องคิดเลขที่สามารถทำการคำนวณในเครื่องเทอร์มินัลได้โดยไม่ต้องมีคำเสริมหน้าและคำต่อท้ายอื่น ๆ

ตัวอย่างเช่น: หากฉันพิมพ์บางอย่างเช่น 10,000-9,000 ในเทอร์มินัลคำตอบควรออกมาเป็น 1,000

อีกครั้งที่ฉันบอกว่าฉันแค่ต้องการเครื่องคิดเลขอย่างรวดเร็วใน terminal โดยไม่ต้องเพิ่มตัวละครใด ๆ ฉันรู้ว่าถ้าฉันเปลี่ยนไปใช้ Python มันสามารถทำได้ แต่ฉันไม่ต้องการมันในแบบนั้น



2
มันอาจจะเป็นไปได้ที่จะตัดบางอย่างเช่นที่ขึ้นกับชนิดของก่อนเบ็ด; แต่ในตัวเองสามารถทำได้ในทางที่น่าเกลียดและแฮ็กเท่านั้น ไม่ฉันคิดว่ามันไม่ใช่ความคิดที่ดี ทุบตีโดยรวมมีความหมายเป็นภาษาสคริปต์ IO ธรรมดาสิ่งที่มันนอกเหนือจากที่มี ad-hoc มากขึ้นหรือน้อยลงและไม่ทำงานได้ดีจริงๆ Python ในอีกทางหนึ่ง (หรือแม้กระทั่งเช่น Haskell) เป็นภาษาการเขียนโปรแกรมที่ทันสมัยและอเนกประสงค์พร้อมกับไวยากรณ์ที่ยอดเยี่ยม ดังนั้นมันคงโง่มากที่จะไม่ใช้มัน
leftaroundabout

3
ในหลอดเลือดดำเดียวกันคุณสามารถทำอะไรกับcommand_not_foundเบ็ดแล้วลองป้อนคำสั่งไปที่bc/ calc/ อะไรก็ได้ถ้ามันดูคลุมเครือเหมือนคณิตศาสตร์ แม้ว่ามันจะยังสกปรกอยู่บ้าง
chronitis

1
เดี๋ยวก่อนคุณหมายถึง "สลับไปยัง" หลามอะไรกันแน่? และ "ไม่มีส่วนนำหน้าเพิ่มเติม" หรือไม่ คุณกำลังบอกว่าคุณต้องการคำนวณสิ่งต่าง ๆ ที่พรอมต์โดยไม่ต้องใช้คำสั่งหรือไม่?
Random832

คำตอบ:


78

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()

1
ขอบคุณคุณสามารถเพิ่มการสนับสนุนเพิ่มเติมด้วยการคำนวณทางวิทยาศาสตร์ได้หรือไม่
rɑːdʒɑ

2
@rajagenupula ดูการแก้ไขของฉันด้านบน
kiri

ขออภัยตอบช้านี้ แต่คำสั่งที่คุณได้รับgcalccmdไม่ได้ทำงานได้ค่อนข้างดี มันแสดงให้เห็นError 3อาจเป็นเพราะช่องว่างที่หลงทางนั้น อย่างไรก็ตามอันนี้ที่ปรับเปลี่ยนเล็กน้อยทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน:echo -e "$calc\nquit"| gcalccmd | sed "s:^> ::g"
udiboy1209

ฉันสร้างเครื่องคำนวณทางวิทยาศาสตร์โดยใช้ R! function = { R -q --vanilla -e "$@" | grep -E '[^>](.*)' -o -x --color=never }
Morteza Milani

สวัสดีและขอบคุณ มันเท่ห์มาก BTW การทดแทนของคุณสำหรับ 'x' ทำให้มันล้มเหลวสำหรับการป้อนฐานสิบหกซึ่งมิฉะนั้นทำงานได้ดี เมื่อพูดถึงสิ่งใดฉันจะได้คำตอบใน 'ฐานสิบหก' ด้วยหรือไม่ เช่น. = 2 + 0x20 34 (0x22)
FractalSpace

93

คุณสามารถทำเลขคณิตจำนวนเต็มอย่างง่ายในการทุบตีโดยใช้((...))ไวยากรณ์เช่น

$ echo $((10000-9000))
1000

นอกจากนี้ยังมีbcเครื่องคิดเลขซึ่งสามารถยอมรับนิพจน์ทางคณิตศาสตร์ในอินพุตมาตรฐาน

$ echo "10000-9000" | bc
1000

bcโปรแกรมสามารถทำลอยคำนวณจุดเช่นกัน

$ echo "scale = 3; 0.1-0.09" | bc
.01

11
นี่อาจใกล้เคียงที่สุดที่คุณจะได้รับ หากต้องการลดการพิมพ์พิเศษ (แม้ว่าจะไม่ได้กำจัดมันทั้งหมด) คุณสามารถใส่ฟังก์ชั่นใน ~ / .bashrc: calc()NL {NL echo "$@" | bcNL }โดยที่ NL เป็นบรรทัดใหม่ จากนั้นคุณสามารถพิมพ์calc 1234 + 768(พิมพ์2002) หรือสูตรอื่น ๆ ที่bcสามารถตีความได้ แน่นอนคุณสามารถใช้ชื่อฟังก์ชั่นใด ๆ ฉันแค่คิดว่าcalcเหมาะสมกับสิ่งนี้
CVn

4
เมื่อหลามดีกว่า echo ตลอดเวลา ความคิดเห็นของฉัน.
rɑːdʒɑ

6
คุณสามารถใช้ bc แบบโต้ตอบได้เช่นกันเว้นแต่คุณต้องการ echo ด้วยเหตุผลอื่น: เพียงแค่รัน bc และพิมพ์นิพจน์ของคุณ พิมพ์ Ctrl-D บนบรรทัดของตนเองเพื่อออก
ไร้ประโยชน์

หากคุณทำการแสดงออกโดยอัตโนมัติด้วยความช่วยเหลือของนามแฝงหรืออย่างอื่นก็จะดี
rɑːdʒɑ

3
ไม่จำเป็นต้องecho:bc <<< "2*2"
แบร์นฮาร์ด

90

calcคุณสามารถใช้ ไม่ได้ติดตั้งตามค่าเริ่มต้น แต่คุณสามารถติดตั้งได้อย่างรวดเร็วโดยใช้คำสั่งต่อไปนี้:

sudo apt-get install apcalc

หลังจากติดตั้งแล้วคุณสามารถทำการคำนวณใด ๆ ที่คุณต้องการ:

$ calc 5+2
    7
$ calc 5-2
    3
$ calc 5*2          
    10
$ calc 5/2
    2.5
$ calc 5^2
    25
$ calc 'sqrt(2)' 
    1.4142135623730950488
$ calc 'sin(2)'
    0.9092974268256816954
$ calc 'cos(2)'
    -0.416146836547142387
$ calc 'log(2)'
    ~0.30102999566398119521
$ calc 'sqrt(sin(cos(log(2))))^2'
    ~0.81633199125847958126
$ # and so on...

สำหรับข้อมูลเพิ่มเติมดูman-page


2
ขอบคุณสำหรับการตอบฉันเห็นว่าคำตอบมีความสำคัญของตัวเอง ฉันชอบบิตเกี่ยวกับการคำนวณฟังก์ชันตรีโกณมิติทั้งหมด คู่มือหรือหน้าใด ๆ เกี่ยวกับสิ่งที่มากกว่านั้นสามารถปรับปรุงคุณตอบมาก :)
rɑːdʒɑ

@rajagenupula man calcและcalc helpพูดทุกอย่าง
Radu Rădeanu

2
ความตั้งใจของฉันคือถ้ามีคนดูมันควรจะชัดเจน & รวดเร็ว ขอขอบคุณ.
rɑːdʒɑ

1
จริงๆแล้วคุณใช้calc help builtinเพื่อดูรายการฟังก์ชั่นที่รองรับเช่นsin()
Penghe Geng

ให้ทศนิยมมากขึ้นดังนั้นจึงเหมาะสำหรับวัตถุประสงค์ของฉันมากกว่าเลขคณิตทุบตีในตัว ขอบคุณ
Mrmfldmn

30

น่าเสียดายที่ไม่มีวิธี "ง่ายกว่า" ในการทำเช่นนี้ อินเตอร์เฟซหลามโต้ตอบในบรรทัดคำสั่งเป็นเหมาะที่สุดสำหรับสิ่งที่คุณต้องการเพราะไม่เหมือนapcalc\, pythonถูกรวมอยู่ในอูบุนตู ฉันไม่แน่ใจว่าbcจะรวมอยู่ด้วยหรือไม่อย่างไรก็ตาม python เป็นรายการโปรดลงมือสำหรับสิ่งนี้

คุณสามารถเรียกใช้pythonอินเทอร์เฟซแบบอินเทอร์เฟซบนบรรทัดคำสั่งแล้วทำแบบนั้น คุณสามารถใช้มันเป็นเครื่องคิดเลขของคุณ

ในการทำเช่นนั้นให้คุณเปิดเทอร์มินัลพิมพ์pythonจากนั้นกดEnterปุ่ม

จากนั้นในพรอมต์หลามที่แสดงขึ้นคุณสามารถพิมพ์คณิตศาสตร์ของคุณใน. 10000 - 9000ยกตัวอย่างเช่น เอาต์พุตบรรทัดถัดไปคือผลลัพธ์


ถ้าคุณหมายถึงบางสิ่งที่คุณเพิ่งโหลดเทอร์มินัลและสามารถทำสิ่งนี้ ...

$ 10,000 - 9000
1000
$

... แล้วไม่มีทางที่จะทำเช่นนี้ในไม่เพียงขั้วโดยไม่ต้องอะไรอื่นเพราะทุบตีไม่ได้จัดการกับข้อโต้แย้งตัวเลขเช่นนั้น


1
ฉันไม่พูดถึงว่าฉันไม่ต้องการที่จะเปลี่ยนเป็นงูหลาม
rɑːdʒɑ

1
@rajagenupula อัปเดตแล้วรวมถึงสิ่งที่ฉันพูดถึงในการแชทด้วย
โธมัสวอร์ด

bc ไม่รวมอยู่ในนี้อีกต่อไป?
Random832

1
นอกจากipythonนี้มันมีประโยชน์มากกว่าเชลล์ Python มาตรฐานเล็กน้อยเมื่อพูดถึงการคำนวณและสิ่งที่คล้ายกัน
Naftuli Kay

bc รวมอยู่ในค่าเริ่มต้น (อย่างน้อยใน 16.04)
TJ Ellis

23

ฉันแนะนำให้คุณสร้างฟังก์ชั่นง่าย ๆ สำหรับการคำนวณ Python พื้นฐาน สิ่งนี้ในของคุณ.bashrc:

calc() {
    python3 -c 'import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 5 + 5
# Returns 10

result="$(calc 5+5)"
# Stores the result into a variable

หากคุณต้องการทำคณิตศาสตร์ขั้นสูงเพิ่มเติมคุณสามารถใช้หนึ่งในต่อไปนี้ซึ่งนำเข้าmathฟังก์ชั่นทั้งหมดของโมดูล (ดูที่นี่สำหรับข้อมูลเพิ่มเติม)

calc() {
    python3 -c 'from math import *; import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 'sqrt(2)'  # Needs quotes because (...) is special in Bash
# Returns 1.4142135623730951

result="$(calc 'sqrt(2)')"
# Stores the result into a variable

(หมายเหตุ: เนื่องจาก Python เป็นภาษาการเขียนโปรแกรมบางสิ่งอาจดูแปลกเช่น**สำหรับพลังของและ%สำหรับโมดูโล)

หรือคุณสามารถสร้างสคริปต์ Python calc,

#!/usr/bin/python3
from math import *
import sys
print(eval(' '.join(sys.argv[1:])))

วางไว้ในไดเรกทอรีที่รวมอยู่ในPATHตัวแปรและตั้งค่าสถานะที่สามารถเรียกใช้งานเพื่อcalcรับคำสั่งเดียวกับข้างบน (ไม่จำเป็นต้องสร้างฟังก์ชัน Bash เพื่อเรียกใช้สคริปต์ Python)

หากคุณต้องการวิธีใน pure Bash ให้ใช้คำตอบของ steeldriver คำตอบนี้มีประโยชน์จริง ๆ หากคุณต้องการฟังก์ชั่นขั้นสูง (เช่นจากmath) เนื่องจาก Python ค่อนข้างช้าเมื่อเทียบกับ Bash


ฉันไม่แน่ใจว่าสิ่งนี้ทำให้ "สลับเป็นงูหลามของคุณหรือไม่และฉันไม่ต้องการมัน" โปรดทราบ แต่คุณไม่จำเป็นต้องป้อนพรอมต์แบบโต้ตอบและผลลัพธ์สามารถเข้าถึงได้ใน Bash ดังนั้นคำตอบนี้จึงใช้ได้ (อย่างน้อยสำหรับฉัน)


ทุกครั้งที่ทุกคนต้องหมายความว่าไม่ง่ายและยืดหยุ่นมาก ขอขอบคุณ. การปรับปรุงใด ๆ ที่คุณสามารถทำให้ดูเรียบง่ายและชัดเจนยิ่งขึ้น? ฉันชอบที่
rɑːdʒɑ

1
@rajagenupula คุณสามารถใส่ว่าในฟังก์ชั่นใน .bashrc ของคุณ (อาจจะมีชื่อสั้น: c, ?หรือ+?) ดังนั้นคุณจะมีมันในแต่ละสถานีที่คุณเปิด
kiri

1
ระวัง: ด้วยงูหลาม 3 นี้ใช้งานได้ดี แต่ถ้าคุณต้องการที่จะใช้งูหลาม 2 คุณจะต้องแก้ไขข้อมูลโค้ดที่: python2 -c "from __future__ import division; from math import *; print($*)"มิฉะนั้นมันจะไม่เสมอแบ่งจำนวนเต็มเช่นการcalc 5/2ที่คุณจะได้รับแทน2 2.5ดูที่นี่สำหรับการอ้างอิง: stackoverflow.com/a/183870/202504
jmiserez

วิธีการแก้ปัญหาหลามจริงอาจจะดีกว่า apcalc ในการที่คุณสามารถนำเข้าห้องสมุดเพิ่มเติมและสนับสนุนตัวอักษรและpi eฉันรู้สึกว่านี่เป็นสคริปต์แยกต่างหากที่ยืดหยุ่นและพกพาได้มากกว่า นี่คือส่วนสำคัญที่เรียบง่ายสำหรับมัน: gist.github.com/jasongeng/279eb396c01e74beb9ef
Penghe Geng

21

ใช้แพ็คเกจgcalccmdจากgnome-calculator(> = 13.04) หรือgcalctool(<13.04) ฉันคิดว่าแพ็คเกจจะติดตั้งตามค่าเริ่มต้น

% gcalccmd
> 2+3
5
> 3/2
1.5
> 3*2
6
> 2-3
−1
> 

ที่ดีที่สุดจนถึงขณะนี้ .. ไม่จำเป็นต้องทำสิ่งที่พิเศษและยังติดตั้งโดยค่าเริ่มต้น .. man gcalccmdพูดว่า: เครื่องคิดเลขคอนโซล มันเป็นสิ่งที่ OP ต้องการ .. :)
Saurav Kumar

นั่นคือเย็น, คล้ายกับ bc, python, ocatve ขอขอบคุณ.
rɑːdʒɑ

ตั้งแต่ gcalccmd ค่อนข้างยากที่จะพิมพ์มันเป็นความคิดที่ดีที่จะเพิ่มนามแฝงไปใน./bash_aliasesเหมือนalias calc='gcalccmd'หรือถ้าคุณต้องการที่จะทำให้การคำนวณ one-off (กับคำตอบทันที) คุณสามารถเพิ่มalias calc='gnome-calculator -s'- การใช้งานของหลัง: หรือcalc 2000/1300 calc 2+3ในกรณีที่มีความจำเป็นที่จะออกจากเครื่องคิดเลข - quitมันก็ช่วยให้คุณมีคำตอบและคุณไม่จำเป็นต้องพิมพ์
Rafal

10

นี่คือเชลล์สคริปต์ด่วนสำหรับสิ่งนี้:

#!/bin/bash
echo "$@" | bc

บันทึกสิ่งนี้เป็น "c" จากนั้นวางไว้ที่ใดที่หนึ่งในเส้นทางของคุณ (เช่น / bin) จากนั้นทำเครื่องหมายที่เรียกใช้งานได้

# nano /bin/c
# chmod +x /bin/c

จากนี้ไปคุณสามารถรันการคำนวณในเทอร์มินัลดังนี้:

$ c 10000-9000
1000

คุณยอดเยี่ยมเพิ่มตัวอักษรเพียงหนึ่งตัวเท่านั้นก่อนการคำนวณหมายความว่ามันเจ๋งจริงๆ นี่คือสุดยอดถ้าฉันต้องการการคำนวณ 2 ถึง 3 ฉันสามารถเลือกไพ ธ อนหรืออื่น ๆ ได้นานกว่า แต่สั้นกว่าฉันเลือกสิ่งนี้ ขอบคุณสำหรับการหยุดโดย.
rɑːdʒɑ

2
ฉันแนะนำให้คุณใช้echo "$@" | bcแทนเพื่อให้คุณสามารถใส่ช่องว่างในการคำนวณได้อย่างเป็นธรรมชาติมากขึ้น
kiri

วิธีการเกี่ยวกับการใช้=แทนcชื่อของคำสั่งนี้หรือไม่? จริง ๆ แล้วทุบตีช่วยให้คุณใช้สิ่งนี้เป็นชื่อของฟังก์ชั่น
Kaz

1
คุณสามารถใส่ลงในโปรแกรม~/bin(directory ที่บ้านของคุณbin) และให้แน่ใจว่าอยู่ในของคุณ/home/yourname/bin PATH
Kaz

@ minerz029 คิดดี ฉันได้แก้ไขคำตอบของฉันแล้ว
user530873

8

นี่คือการเปลี่ยนแปลงของส่วนที่เหมาะสมของ/etc/bash.bashrc(บน Ubuntu 10.04) ที่จะปรับเปลี่ยนการcommand_not_foundจัดการเพื่อให้ทำงานได้ประเมินการแสดงออกของเปลือกถ้าอักษรตัวแรกของคำสั่งที่ไม่รู้จักเป็นตัวเลขหรือหรือ-+

คุณสามารถทำเลขคณิตของเชลล์ได้ด้วยวิธีนี้ ดูhttp://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmeticสำหรับรายการตัวดำเนินการทางคณิตศาสตร์

โปรดทราบว่าหากนิพจน์ที่คุณต้องการประเมินมี a *คุณจะต้องอ้างอิง*ด้วย\หรืออัญประกาศเนื่องจากเชลล์จะทำการขยายชื่อไฟล์ก่อนที่จะตัดสินใจว่าจะรันคำสั่งใด สิ่งเดียวกันสำหรับผู้ประกอบการอื่น ๆ >>เช่น

ใส่สิ่งนี้ลงในของคุณ~/.bashrcจากนั้นพิมพ์. ~/.bashrcและทดลองใช้

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
    function command_not_found_handle {
        if [[ $1 == [0-9+-]* ]]; then
           echo $(( $@ ))
        elif [ -x /usr/lib/command-not-found ]; then
           /usr/bin/python /usr/lib/command-not-found -- $1
           return $?
        elif [ -x /usr/share/command-not-found ]; then
           /usr/bin/python /usr/share/command-not-found -- $1
           return $?
        else
           return 127
        fi
    }
fi

ตัวอย่างผลลัพธ์: (ฉันพิมพ์cta, ตัวพิมพ์ผิด, เพื่อทดสอบว่า command_not_found handler ใหม่ของเราจะยังคงพยายามค้นหาคำสั่งที่ไม่รู้จัก)

mp@ubuntu:~$ cta
No command 'cta' found, did you mean:
 Command 'cda' from package 'xmcd' (universe)
 Command 'cat' from package 'coreutils' (main)
cta: command not found
mp@ubuntu:~$ 9000-1000
8000

มีวิธีใดบ้างที่เราสามารถเพิ่มการสนับสนุนเพิ่มเติมสำหรับการคำนวณได้
rɑːdʒɑ

1
คุณสามารถนำบรรทัดที่เขียนecho $(( $@ ))และเปลี่ยนเป็นแทนเรียกใช้หนึ่งในโปรแกรมเครื่องคิดเลขขั้นสูงที่ผู้ตอบแบบสอบถามคนอื่น ๆ ได้กล่าวไว้ว่าให้รับอาร์กิวเมนต์บนบรรทัดคำสั่ง
Mark Plotnick

8

ทางออกก็ฉันไม่ได้เห็นกล่าวถึงที่นี่เป็นQalculate (qalc)

sudo apt-get install qalc

สำหรับเวอร์ชัน CLI

sudo apt-get install qalculate-gtk

สำหรับ GUI

มันมีคุณสมบัติมากมายเช่น:

  • สนับสนุนหน่วย : เช่น20 m / s * 12 h = 864 kilom
  • ในตัวคงที่เช่นpi, e, c,avogadro
  • จำนวนมากในตัวฟังก์ชั่น : เช่นsin(pi) = 0, gamma(4) = 6, 5! = 120,log(1024, 2) = 10
  • การแปลงหน่วยเช่น:

> 120 in
120 * inch = 120 in
> convert cm
120 in = 304.8 centim

  • การคำนวณเชิงสัญลักษณ์เช่น(x + y)^2 = x^2 + 2xy + y^2
  • บูรณาการเช่นintegrate 3*x^2 = x^3,diff sin(x), pi
  • ในตัวความช่วยเหลือเช่นhelp convert,help integrate
  • แท็บเสร็จสิ้นคำสั่ง
  • ทุกอย่างที่ได้รับการแปลเช่นระบบของฉันอยู่ในดัตช์ดังนั้นฉันสามารถเขียนทั้งสองและfactorial(5)faculteit(5)
  • และอื่น ๆ...

คุณบอกว่าคุณต้องการใช้มันโดยไม่มีคำนำหน้าดี ... คุณสามารถใช้กับคำนำหน้า:

$ qalc 5 ft + 3 cm
(5 * foot) + (3 * centim) = 1.554 m

เช่นเดียวกับการเรียกใช้มันเป็นแบบจำลอง


7

dc! มันเป็นส่วนหนึ่งของ coreutils ดังนั้นจึงติดตั้งบน OS X, Ubuntu และทุกอย่างอื่น มันเป็นเครื่องคิดเลข RPN ดังนั้นถ้าคุณไม่ชอบสิ่งนั้นมันก็ไม่เหมาะกับคุณ

คำสั่งพื้นฐานมากมีดังนี้ (manpage มีไวยากรณ์ทั้งหมดที่ฉันไม่ได้รวมการยกกำลังทุกคน?)

คุณต้องการช่องว่างระหว่างตัวเลข พวกเขาจะถูกละเว้นในกรณีอื่น ๆ ทั้งหมด

การพิมพ์ตัวเลขจะผลักไปที่ด้านบนสุดของสแต็ก

+ Adds top 2 items in stack, then pushes result to stack (`2 4 +p` outputs 6)
- Subtracts top 2 items in stack, then pushes result to stack (`4 2 -p` outputs 2)
* Multiplies top 2 items in stack, then pushes result to stack (`6 5 *p` outputs 30)
/ Divides top 2 items in stack, then pushes result to stack (`54 7 /p` outputs 8)
p Print top item in stack, without destroying it
c Clear stack
r Swap top 2 items on stack
d Duplicate top item on stack
k Pops top item off stack, using it to determine precision (so 10 k would print 10 numbers after the decimal point). Default is 0, so it won't do floating point math by default.
n Pops top value off stack, then sends to stdout without a trailing newline
f Dump stack. Useful for finding what something does

เพิ่งสังเกตเห็นสิ่งนี้ไม่ได้ตอบคำถาม (หรือไม่ทำคำตอบอื่น ๆ ) คำถามคือจะไม่มีสิ่งใดในด้านหน้าของสมการ (หรือด้านหลัง) และเพียงพิมพ์พูด42 * 5ลงในเทอร์มินัลและส่งคำตอบออกไป
ผู้ใช้คนอื่น

2
คำตอบส่วนใหญ่ใช้ไม่ได้ การพิมพ์1+1ในเทอร์มินัลแทบจะไม่ทำงานเลย ดังนั้นคำตอบของคุณก็ดี
kiri

@YetAnotherUser ผมคิดว่าวิธีเดียวที่จะเจาะเข้าไปในคำสั่งที่ไม่พบ (ถ้ามีการติดตั้ง) หรือทำสิ่งสกปรกใน bashrc และ ...
Braiam

5

ฉันใช้ Octave สำหรับสิ่งเหล่านี้: http://www.gnu.org/software/octave/

มันเป็นโคลน MATLAB ค่อนข้างมาก (ขออภัยถ้านี่เป็นการทำให้เข้าใจง่ายเกินไป) ซึ่งสามารถใช้ในเทอร์มินัลได้โดยพิมพ์อ็อกเทฟ ติดตั้ง sudo apt-get install octave

มันไม่ใช่สิ่งที่คุณต้องการ แต่ฉันคิดว่าฉันจะเพิ่มมันเป็นทางเลือกสำหรับหลาม

ตัวอย่างการใช้งาน:

~ $ octave
octave:1> 9000 - 8000
ans =  1000
octave:2> 

การแนะนำวิธีอื่นในการบรรลุเป้าหมายนั้นเป็นเรื่องปกติในคำตอบ แต่คุณควรให้ข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ OP จะใช้ Octave เพื่อตอบสนองความต้องการที่ระบุไว้และทำไมจึงเป็นทางเลือกที่ดี
chaskes

2
+1, คู่, matlab, scilab, python ทั้งหมดมีลักษณะคล้ายกัน แต่คู่ฉันต้องติดตั้ง แต่หลามติดตั้งไว้ล่วงหน้า ดังนั้นฉันจึงมุ่งไปที่ python โดยค่าเริ่มต้น ขอขอบคุณ.
rɑːdʒɑ

จากสิ่งที่ฉันพยายาม (และฉันพยายามมาก!) ระดับแปดเสียงเป็นเพียงคนเดียวที่จะกลับไม่ใช่ 0 ในข้อผิดพลาดทางไวยากรณ์! ขอบคุณ!
กุมภ์

5

ฉันชอบ wcalc มาก มันเป็นเครื่องคิดเลขวิทยาศาสตร์บรรทัดคำสั่ง หาง่ายในศูนย์ซอฟต์แวร์อูบุนตูหรือใช้ฉลาด - รับ

sudo apt-get install wcalc

ยอมรับอาร์กิวเมนต์บรรทัดคำสั่งและมีโหมด "shell":

# simple operation
$ wcalc 2+2
 = 4
# Quoting is necessary to prevent shell from evaluating parenthesis
$ wcalc "(2+2)*10"                                                                                    
 = 40
$ wcalc "sqrt(25)"                                                                                    
~= 5
# in shell mode you can evaluate multiple commands repeatedly
$ wcalc
Enter an expression to evaluate, q to quit, or ? for help:
-> 12*20+1
 = 241
-> sin(90)
 = 1
-> sin(pi/2)
 = 0.0274121

และถ้าใครบางคนอยู่ในสาขาวิศวกรรมเช่นเดียวกับตัวเองคุณสามารถใช้ประโยชน์จาก GNU Octave ได้ มันสามารถทำสิ่งต่าง ๆ กราฟการแก้สมการพร้อมกัน นอกจากนี้ยังเป็นทางเลือกฟรีสำหรับ Matlab


... การรวมเข้ากับ @ minerz029 นั้นค่อนข้างเรียบร้อย: วางมันลงใน ~ / .bash_aliases ของคุณ:=() { wcalc "$@" }
Frank Nocke

4

วิธีง่ายๆคือการเรียกหลาม

ตัวอย่าง:

>  python -c 'print 10000-9000'

คุณสามารถพูดถึงบางสิ่งด้วยการคำนวณทางวิทยาศาสตร์
rɑːdʒɑ

1
คุณต้องการอะไรแบบนี้? python -c 'import math;print math.log(2)'
user1251007

3

สิ่งที่ฉันได้พบคือฉันไม่สามารถเชื่อถือตัวเลือก expr, bc หรือ shell ที่สร้างขึ้นได้ ดังนั้นฉันใช้ Perl ซึ่งปกติจะติดตั้งใน * linux distro ของ

perl -le 'printf "%.0f", eval"@ARGV"' "($VAL2-$VAL1)"

การคำนวณข้างต้นจะลบ $ VAL1 จาก $ VAL2 และพิมพ์โดยไม่มีทศนิยม (0f)

ประโยชน์ของการใช้ Perl คือ (รายละเอียดของข้อดีข้อเสียอยู่ที่นี่ )

  • จับข้อผิดพลาดได้ดีขึ้น (หารด้วย 0 จะไม่หยุดการคำนวณ)
  • สามารถจัดทำสูตรในไฟล์ปรับแต่ง ไม่จำเป็นต้องหลบหนีโดยใช้ regex ที่ซับซ้อน

แต่ทุกครั้งที่คำสั่งนั้นหมายถึงปัญหาเล็กน้อย แต่อย่างใด จะมีเครื่องคำนวณตาม Perl ที่จะใช้ใน terminal?
rɑːdʒɑ

3

คุณสามารถเพิ่มฟังก์ชั่นต่อไปนี้ในไฟล์. bashrc ของคุณ:

function = {
  echo "$@" | bc -l
}

โปรดทราบว่าการ-lตั้งค่าสถานะนั้นสำคัญมาก โดยไม่ได้ใช้จะช่วยให้bc5 / 2 = 2

เนื่องจากเป็น menthioned ด้านบนการคำนวณอาจทำได้โดยใช้=เครื่องหมายหน้าสูตร


3

คุณสามารถใช้awkเพื่อทำการคำนวณทางคณิตศาสตร์บนเทอร์มินัล

echo 10000 9000 | awk '{print $1-$2}'
1000
echo 10000 9000 | awk '{print $1+$2}'
19000
echo 10000 9000 | awk '{print $1/$2}'
1.11111
echo 10000 9000 | awk '{print $1*$2}'
90000000

เจ๋ง awk (เป็นอ็อกเทฟ) ยังส่งคืนไม่ใช่ 0 ในข้อผิดพลาดทางไวยากรณ์ขอบคุณ!
กุมภ์อำนาจ

2

ใช้คำสั่ง "bc" จากนั้นคุณสามารถคำนวณได้

ตัวอย่าง

[root@vaibhav ~]# bc

----------these lines will genrate automaicaly---------------

right 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

---------------enter your calculation here---------------------------------------


10+2   

12

หากต้องการใช้bcโดยไม่มีใบรับประกันให้เขียนลงในเครื่องbc -q

ตัวอย่าง

[root@vaibhav ~]# bc -q
10+2
12

bc ได้รับการอธิบายและรวมไว้แล้ว
Braiam

2

คุณสามารถใช้การเชื่อมโยงและ bash C-aและC-eเพื่อควบคุมเอาต์พุต ตัวอย่างเช่นรันสิ่งนี้ในเชลล์ของคุณ:

bind '"\C-j": "\C-aecho $(( \C-e )) \C-m"'

ตอนนี้พิมพ์การดำเนินการทางคณิตศาสตร์ใด ๆ เช่น 10 + 15 และกดCtrl+ J:

$ echo $(( 10 + 15 )) 
25

คุณจะได้รับสิ่งนี้ ตอนนี้มันจะทำอย่างไร

  • bind คำสั่งนี้จะเปลี่ยนการเชื่อมโยงของ bash ของคุณเช่นเดียวกับปุ่มลัด
  • \C-j นี่คือ bash เทียบเท่ากับ Ctrl + J นี่คือชุดค่าผสมที่สำคัญที่เราต้องการเพิ่มในคำสั่งของเรา
  • \C-a สิ่งนี้นำเราไปสู่จุดเริ่มต้นของบรรทัด
  • echo $((สิ่งนี้เขียนecho $((เมื่อเริ่มต้น
  • \C-e พาเราไปจนสุดบรรทัด
  • )) ปิดวงเล็บก่อนหน้าของเรา
  • \C-m นี่เทียบเท่ากับคีย์ส่งคืน

คุณสามารถเขียนสิ่งนี้ลงใน~/.inputrcไฟล์ของคุณ:

"\C-j": "\C-aecho $(( \C-e )) \C-m"

แน่นอนคำตอบอื่น ๆ ก็ใช้ได้เช่นกัน! เพิ่งเอ็นดูเล็กน้อย:

  • BC: "\C-j": "\C-aecho " \C-e " | bc \C-m"
  • apcalc: "\C-j": "\C-acacl \C-m"
  • หลาม: "\C-j": "\C-apython3 -c "print( \C-e )" \C-m"
  • อื่น ๆ ?

คุณสามารถเปลี่ยน Ctrl + J เป็นอะไรก็ได้ที่คุณชอบ แต่จำไว้ว่าอย่าพยายามเปลี่ยนมันสำหรับสิ่งที่มีผลผูกพันอยู่แล้ว)

ทรัพยากร:


Ctrl + J มีข้อผูกมัดแล้วก็ส่งบรรทัด (เช่น Enter) นี่เป็นคำตอบที่ฉลาดจริง ๆ แต่)
kiri

2

ก่อนหน้านี้ฉันเคยใช้wcalcและมีโปรแกรมเล็กน้อยที่เรียกeว่า google เป็นไปไม่ได้ ตอนนี้ฉันใช้สคริปต์ไพ ธ อนเพื่อทำสิ่งนี้ซึ่งใช้คุณสมบัติบางอย่างของeเช่นวงเล็บเหลี่ยม wcalcยังคงดีเพราะมันสามารถทำการแปลงหน่วยและความแม่นยำโดยพลการ แต่ฉันแทบจะไม่เคยใช้คุณสมบัติเหล่านั้น

#!/usr/bin/env python3

"""
This is a very simple command line calculator.  It reads in all
arguments as a single string and runs eval() on them.  The math module
is imported so you have access to all of that.  If run with no
arguments, it allows you to input a single line expression.  In the
case of command line args, square brackets are replaced with round
parentheses, because many shells interpret round parentheses if they
are not quoted.
"""

import sys, numbers
import cmath, math

args = sys.argv[1:]

if len(args) < 1:
    expr = input()
else:
    expr = " ".join(args[:])
    expr = expr.replace("[", "(").replace("]", ")")

def log2(x):
    """Return the base-2 logarithm of x."""
    return cmath.log(x, 2)

# the smallest number such that 1+eps != 1
# (this is approximate)
epsilon = sys.float_info.epsilon

env = math.__dict__
env.update(cmath.__dict__)
env = {k:v for k,v in env.items() if not k.startswith("__")}
env["eps"] = epsilon
env["log2"] = log2
env["inf"] = float("inf")
env["nan"] = float("nan")

res = eval(expr, env)
# throw away small imaginary parts, they're probably just due to imprecision
if (isinstance(res, numbers.Number)
    and res != 0
    and abs(res.imag)/abs(res) < 10*epsilon):
    res = res.real

print(str(res).replace("(", "[").replace(")", "]"))

ต่อไปนี้เป็นวิธีใช้งาน (สมมติว่าสคริปต์ได้รับการบันทึกeและใส่ไว้ในที่$PATH):

$ e e**[pi*1i]
-1.0
$ e hex[10**3]
0x3e8
$ e "[0o400+3]&0xff" # need quotes because of '&'
3

ตัวอย่างจะทำให้สิ่งนี้ดูชัดเจนยิ่งขึ้นขอบคุณ
rɑːdʒɑ

0

มีวิธีหนึ่งขั้นตอนในการบรรลุสิ่งที่คุณต้องการ ทั้งหมดที่คุณต้องทำคือการกำหนดให้บัญชีของคุณshell/bin/bc


3
คุณช่วยอธิบายรายละเอียดได้ไหม? Pressume OP ไม่รู้วิธีเปลี่ยนเชลล์
Braiam

0

คุณยังสามารถใช้printf shell builtin เพื่อทำการคำนวณทางคณิตศาสตร์บนเทอร์มินัล

printf `expr $num1 + $num2`   # num1,num2 are  variables which stores numbers as values.

ตัวอย่าง:

$ printf "$(expr 10000 + 9000)\n"
19000
$ printf "$(expr 10000 - 9000)\n"
1000

3
วิธีที่คุณใช้ expr (ซึ่งไม่ได้สร้างขึ้น) นี้เพื่อคำนวณผลลัพธ์ printf จะซ้ำซ้อนที่นี่
Javier López

0

คุณสามารถใช้ python interpreter สำหรับการคำนวณ นี่คือการสอนเกี่ยวกับวิธีการทำเช่นนั้น

Python 2 และ python 3 ถูกติดตั้งใน Ubuntu ตามค่าเริ่มต้น

$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2+2
4
>>> 3*5
15

0

สร้างเครื่องคิดเลขเทอร์มินัล

ใส่สิ่งต่อไปนี้ในไฟล์. bashrc ของคุณ

function calc
{
 echo "${1}"|bc -l;
}

หรือเรียกใช้ที่พรอมต์เชลล์ ตอนนี้ "calc" จากเปลือกจะทำงานดังนี้:

$ calc 3+45
   48

ฟังก์ชันทั้งหมดที่มี "(" หรือ ")" จะต้องอยู่ในเครื่องหมายคำพูด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.