우분투에 대한 명령 줄 계산기?


119

다른 추가 접두사와 접미사없이 터미널 자체에서 계산을 수행 할 수있는 계산기를 찾고 있습니다.

예를 들어 : 터미널에 10000-9000과 같은 것을 입력하면 대답은 1000으로 나타납니다.

다시 한 번 말하지만, 문자를 추가하지 않고 터미널에 빠른 계산기가 필요합니다. 파이썬으로 전환하면 할 수는 있지만 그런 식으로 원하지는 않습니다.



2
수도 이전 훅의 종류처럼 뭔가를 해킹하는 것이 가능; 그러나 그것 자체만으로는 정말 추악하고 해킹 된 방식으로 만 수행 될 수 있습니다 . 아니요, 좋은 생각이 아니라고 생각합니다. 배쉬 전체는 평범한 IO 스크립팅 언어를 의미합니다. 그와 별도로하는 것은 거의 임시적이지 않으며 실제로 잘 작동하지 않습니다. 반면에 파이썬 (또는 예를 들어 Haskell)은 훌륭한 구문을 가진 현대적인 다목적 프로그래밍 언어입니다. 그래서 그것을 사용하지 않는 것은 어리석은 일입니다.
leftaroundabout

3
같은 맥락에서, 당신은 또한 command_not_found후크로 무언가를 할 수 있고, 명령 이 애매하게 수학처럼 보일 경우 bc/ calc/ 무엇이든 명령을 공급해 볼 수 있습니다. 그래도 여전히 조금 더럽습니다.
chronitis

1
잠깐, 파이썬으로 "전환"한다는 것은 정확히 무엇을 의미합니까? 그리고 "추가 접두사없이"? 명령을 실행하지 않고 프롬프트에서 사물을 계산할 수 있기를 원합니까?
Random832

답변:


78

배쉬 산술

또 다른 가능한 해결책은 Bash의 내장 산술에 간단한 함수를 추가하는 것입니다. 이것을 .bashrc시도하기 위해 파일에 넣으십시오 .

=() {
    echo "$(($@))"
}

이제 $((...))더 이상 필요하지 않습니다 =. 자연스럽게 보입니다.

바꿔 놓음

또 다른 한가지는 당신이 더 빨리 될하려는 경우 : 당신은 그것을 대체 할 수 p+x함께 *. 이것은 그것을 위해 작동합니다 :

=() {
    local IFS=' '
    local calc="${*//p/+}"
    calc="${calc//x/*}"
    echo "$(($calc))"
}

= 5 x 5  # Returns 25
= 50p25  # Returns 75

이제는 Shift더 이상 필요하지 않습니다 . 유일한 것은 산술 앞에 있습니다.

16 진 출력

원하는 경우 출력을 10 진수 및 16 진수로 표시 할 수 있습니다. ( 참고 : x대체를 사용 하면 0x...16 진수 구문 과 충돌 합니다)

=() {
    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'를 대체하면 16 진수 입력이 실패합니다. 그렇지 않으면 제대로 작동합니다. 말하자면, '16 진수 '로 답을 얻을 수 있습니까? 예. = 2 + 0x20 34 (0x22)
FractalSpace

93

((...))구문을 사용하여 bash에서 기본적으로 간단한 정수 산술을 수행 할 수 있습니다.

$ 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(prints 2002) 또는 bc해석 할 수 있는 다른 수식을 입력 할 수 있습니다. 물론 모든 함수 이름을 사용할 수 있습니다. 방금 이것이하는 것과 calc잘 어울린다고 생각했습니다 .
CVn

4
일단 파이썬이 항상 에코보다 낫습니다. 내 의견.
rɑːdʒɑ

6
다른 이유로 에코가 필요하지 않은 한 bc를 대화식으로 사용할 수도 있습니다. bc를 실행하고 식을 입력하십시오. 종료하려면 자체 행에 Ctrl-D를 입력하십시오.
쓸모없는

별명이나 다른 것을 사용하여 자동 표현을했다면 그것은 좋을 것입니다.
rɑːdʒɑ

3
필요 없음 echo:bc <<< "2*2"
Bernhard

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...

자세한 내용은 맨 페이지를 참조하십시오.


2
답변 해 주셔서 감사합니다. 답변에 고유 한 의미가 있습니다. 나는 모든 삼각 함수 계산에 대해 조금 더 좋아합니다. 무엇을 더 할 수 있는지에 대한 매뉴얼이나 페이지는 많은 답변을 향상시킬 수 있습니다. :)
rɑːdʒɑ

@rajagenupula man calccalc help모든 것을 말합니다.
Radu Rădeanu

2
내 강렬은 누군가 그것을 보면 분명하고 빠르다는 것입니다. 감사합니다.
rɑːdʒɑ

1
실제로 다음 calc help builtin과 같은 지원되는 기능 목록을 보는 데 사용 합니다.sin()
Penghe Geng

더 많은 소수점을 제공하므로 내장 bash 산술보다 내 목적에 더 적합합니다. 감사.
Mrmfldmn

30

불행히도이 작업을 수행하기위한 "더 쉬운"방법은 없습니다. 달리하기 때문에 명령 행에서 대화 형 파이썬 인터페이스는 최고의 당신이 필요에 적합하다 apcalc\ python됩니다 포함 우분투. bc그래도 여전히 포함되어 있는지 확실하지 않지만 파이썬은이 물건에 가장 좋아하는 곳입니다.

python명령 행 에서 대화식 인터페이스를 실행 한 다음 계산을 수행하면됩니다. 이것을 계산기로 사용할 수 있습니다.

그렇게하려면 터미널 python을 열고을 입력 한 다음 Enter버튼을 누르십시오.

그런 다음 표시되는 python 프롬프트에서 수학을 입력 할 수 있습니다. 예를 들어 10000 - 9000. 다음 라인 출력이 결과입니다.


그래도 터미널을로드하고 이것을 할 수있는 무언가를 의미한다면 ...

$ 10000-9000
1000
$

... Bash는 숫자 인수를 처리하지 않기 때문에 다른 것없이 터미널 에서만 이 작업을 수행 할 수있는 방법 이 없습니다.


1
나는 파이썬으로 전환하려는 해달라고 언급 않았다
rɑːdʒɑ

1
@rajagenupula가 업데이트되었으며 채팅에서 언급 한 내용도 포함되었습니다.
토마스 워드

bc는 더 이상 포함되지 않습니까?
Random832

1
제쳐두고, ipython계산 등을 할 때 표준 파이썬 쉘보다 훨씬 더 유용합니다.
Naftuli Kay

bc는 기본적으로 포함되어 있습니다 (최소 16.04 이상)
TJ Ellis

23

기본적인 파이썬 계산을위한 간단한 함수를 만드는 것이 좋습니다. 당신 의이 같은 것 .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은 프로그래밍 언어이므로 일부 기능 (예 : **거듭 제곱과 %모듈로) 은 이상하게 보일 수 있습니다 )

또는 당신은 파이썬 스크립트를 만들 수 있습니다 calc,

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

PATH변수에 포함 된 디렉토리에 배치 하고 실행 플래그를 설정하여 calc위와 동일한 명령 을 얻습니다 (Python 스크립트를 실행하기 위해 Bash 함수를 작성할 필요가 없습니다).

순수한 Bash에서 방법을 원한다면 steeldriver 's answer을 사용하십시오. 이 답변은 mathPython이 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'또는 (즉시 대답으로) 일회성 계산을하려는 경우, 당신은 추가 할 수 있습니다 alias calc='gnome-calculator -s': 후자의 사용 - calc 2000/1300calc 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좀 더 자연스럽게 계산에 공백을 넣을 수 있도록 대신
키리

이 명령의 이름 =대신 에 사용 하는 것은 c어떻습니까? Bash는 실제로 이것을 함수의 이름으로 사용할 수 있습니다.
Kaz

1
프로그램을 ~/bin(홈 디렉토리 bin)에 넣고 프로그램 /home/yourname/bin이에 있는지 확인할 수 있습니다 PATH.
Kaz

좋은 생각이야. 그에 따라 답변을 편집했습니다.
user530873

8

다음의 해당 부분의 수정의 /etc/bash.bashrc수정 것 (우분투 10.04)에 command_not_found알 수없는 명령의 첫 번째 문자가 숫자 또는 경우 쉘의 식 계산기를 실행하는 핸들러 -+.

이런 식으로 쉘 산술을 수행 할 수 있습니다. 산술 연산자 목록 은 http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic 을 참조 하십시오 .

평가하려는 표현식에가 포함 된 경우 *, 쉘은 파일 이름 확장을 수행하여 실행할 명령을 결정하기 때문에 *with \또는 quotes 를 인용 해야합니다. 같은 다른 연산자도 마찬가지 >>입니다.

이것을에 넣고 ~/.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 핸들러가 여전히 알 수없는 명령을 찾으려고 시도하는지 테스트하기 위해 오타를 입력하고 있습니다).

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

뿐만 아니라 repl로 실행하십시오.


7

dc! 그것은 coreutils의 일부이므로 OS X, Ubuntu 및 기타 거의 모든 곳에 설치됩니다. RPN 계산기이므로 마음에 들지 않으면 적합하지 않습니다.

매우 기본적인 명령은 다음과 같습니다 (맨 페이지에는 포함하지 않은 모든 구문이 있습니다. 지수, 누군가?)

숫자 사이에는 공백이 필요합니다. 다른 모든 경우에는 무시됩니다.

숫자를 입력하면 스택 맨 위로 밉니다.

+ 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 설치 옥타브

그것은 당신이 원하는 것이 아니지만 파이썬의 대안으로 추가 할 것이라고 생각했습니다.

사용법 예 :

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

답변을 통해 목표를 달성 할 수있는 다른 방법을 제안하는 것은 좋지만 OP가 옥타브를 사용하여 명시된 요구를 충족시키는 방법과 이것이 좋은 대안 인 이유에 대한 자세한 정보를 제공해야합니다.
chaskes

2
+1, 옥타브, matlab, silab, 파이썬은 모두 비슷하지만 옥타브는 설치해야하지만 파이썬은 사전 설치되어 있습니다. 기본적으로 파이썬으로 향합니다. 감사합니다.
rɑːdʒɑ

시도한 (그리고 많은 시도했습니다!) 옥타브는 구문 오류에서 0이 아닌 것을 반환하는 유일한 것입니다! 고마워!
물병 자리 힘

5

나는 wcalc을 많이 좋아한다. 명령 줄 과학 계산기입니다. Ubuntu Software Center에서 쉽게 찾거나 apt-get을 사용하십시오.

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 "$@" }
프랭크 Nocke

4

간단한 방법은 파이썬을 호출하는 것입니다.

예:

>  python -c 'print 10000-9000'

과학적 계산으로 무언가를 언급 할 수 있습니까?
rɑːdʒɑ

1
이런 것을 원하십니까? python -c 'import math;print math.log(2)'
user1251007

3

내가 찾은 것은 expr, bc 또는 내장 셸 옵션을 신뢰할 수 없다는 것입니다. 따라서 * linux 배포판에 일반적으로 설치되는 Perl을 사용했습니다.

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

위의 계산은 $ VAL2에서 $ VAL1을 빼고 소수점 이하 자릿수 (0f)없이 인쇄합니다.

Perl 사용의 이점은 다음과 같습니다 (여기에 나열된 장단점 )

  • 더 나은 오류 캡처 (0으로 나누면 계산이 중단되지 않음)
  • 구성 파일에 수식을 제공 할 수 있습니다. 복잡한 정규식을 사용하여 벗어날 필요가 없습니다.

그러나 그 명령은 언제나 약간의 문제를 의미합니다. 터미널에서 사용할 펄 기반 계산기가 있습니까?
rɑːdʒɑ

3

.bashrc 파일에 다음 기능을 추가 할 수 있습니다.

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

그 주 -l플래그가 매우 중요합니다. 그것 없이는 bcgives 사용 합니다 5 / 2 = 2.

위에서 언급 한 것처럼 계산은 =공식 앞에 부호를 사용하여 수행 할 수 있습니다 .


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

cool, awk (octave)는 구문 오류 thx에서 0이 아닌 값을 반환합니다!
물병 자리 힘

2

"bc"명령을 사용하면 u 계산을 수행 할 수 있습니다

[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는 이미 설명되고 포함되어 있습니다.
브라이 암

2

당신은 바인딩과 떠들썩한 파티를 사용 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 이것은 Ctrl + J와 같은 bash입니다.이 명령에 키 조합을 추가하고 싶습니다.
  • \C-a 이것은 우리를 라인의 시작으로 안내합니다.
  • echo $((이것은 echo $((처음에 씁니다 .
  • \C-e 우리를 줄의 끝으로 데려가
  • )) 이전 괄호를 닫습니다
  • \C-m 이것은 리턴 키와 같습니다.

이것을 ~/.inputrc파일에 쓸 수 있습니다 .

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

물론 다른 답변도 유효합니다! 방금 약간 조정했습니다.

  • 기원전: "\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했습니다. 이제 파이썬 스크립트를 사용하여 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 쉘 내장을 사용 하여 터미널에서 산술 계산을 수행 할 수도 있습니다 .

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와 여기에 중복
하비에르 로페스

0

파이썬 인터프리터를 사용하여 계산할 수 있습니다. 방법은 다음과 같습니다 .

파이썬 2와 파이썬 3은 기본적으로 우분투에 설치됩니다.

$ 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.