사용 echo "20+5"
문자 그대로하면 텍스트를 "생산 20+5
".
25
이 경우 숫자 합계를 얻기 위해 어떤 명령을 사용할 수 있습니까?
또한 부동 소수점에 bash를 사용하는 가장 쉬운 방법은 무엇입니까? 예를 들어, echo $((3224/3807.0))
인쇄 0
:(.
기본 명령 셸 ( '명령 줄') 자체를 사용하거나 명령 줄에서 사용할 수있는 언어를 사용하여 답을 찾고 있습니다.
사용 echo "20+5"
문자 그대로하면 텍스트를 "생산 20+5
".
25
이 경우 숫자 합계를 얻기 위해 어떤 명령을 사용할 수 있습니까?
또한 부동 소수점에 bash를 사용하는 가장 쉬운 방법은 무엇입니까? 예를 들어, echo $((3224/3807.0))
인쇄 0
:(.
기본 명령 셸 ( '명령 줄') 자체를 사용하거나 명령 줄에서 사용할 수있는 언어를 사용하여 답을 찾고 있습니다.
답변:
$ printf %.10f\\n "$((10**9 * 20/7))e-9" # many shells. Not mksh.
$ echo "$((20.0/7))" # (ksh93/zsh/yash, not bash)
$ awk "BEGIN {print (20+5)/2}"
$ zcalc
$ bc <<< 20+5/2
$ bc <<< "scale=4; (20+5)/2"
$ dc <<< "4 k 20 5 + 2 / p"
$ expr 20 + 5
$ calc 2 + 4
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
$ echo 20 5 2 / + p | dc
$ echo 4 k 20 5 2 / + p | dc
$ perl -E "say 20+5/2"
$ python -c "print(20+5/2)"
$ python -c "print(20+5/2.0)"
$ clisp -x "(+ 2 2)"
$ lua -e "print(20+5/2)"
$ php -r 'echo 20+5/2;'
$ ruby -e 'p 20+5/2'
$ ruby -e 'p 20+5/2.0'
$ guile -c '(display (+ 20 (/ 5 2)))'
$ guile -c '(display (+ 20 (/ 5 2.0)))'
$ slsh -e 'printf("%f",20+5/2)'
$ slsh -e 'printf("%f",20+5/2.0)'
$ tclsh <<< 'puts [expr 20+5/2]'
$ tclsh <<< 'puts [expr 20+5/2.0]'
$ sqlite3 <<< 'select 20+5/2;'
$ sqlite3 <<< 'select 20+5/2.0;'
$ echo 'select 1 + 1;' | sqlite3
$ psql -tAc 'select 1+1'
$ R -q -e 'print(sd(rnorm(1000)))'
$ r -e 'cat(pi^2, "\n")'
$ r -e 'print(sum(1:100))'
$ smjs
$ jspl
정수 산술에 POSIX 산술 확장을 사용할 수 있습니다 echo "$((...))"
.
$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22
이식성 ( ash dash yash bash ksh93 lksh zsh
) :
printf 기능을 사용하여 부동 소수점을 인쇄하면 제한된 범위 (10 자리 이하)로 부동 소수점 연산을 수행하도록 대부분의 쉘을 확장 할 수 있습니다.
$ printf %.10f\\n "$((1000000000 * 20/7 ))e-9"
2.8571428570
ksh93
, yash
그리고 zsh
여기에 지원 수레를 수행합니다
$ echo "$((1.2 / 3))"
0.4
라이브러리 mathfunc 만 ksh93
(직접) zsh
로드하는 경우 :
$ echo "$((4*atan(1)))"
3.14159265358979324
( 와 같은 기능 zsh
을 사용하려면로드해야합니다 ).zmodload zsh/mathfunc
atan
zsh와 대화식으로 :
$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17
(t) csh 사용 (정수만 해당) :
% @ a=25 / 3; echo $a
8
에서 rc
쉘 가족, akanga
연산 확장과 하나입니다 :
; echo $:25/3
8
bc
(대화식 모드는 아래 참조), 매뉴얼은 여기
니모닉 : best calculator ( b
실제로는 basic입니다 ).
$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000
(임의의 정밀도 숫자 지원)
bc 대화식 모드 :
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5+5
10
2.2+3.3
5.5
Rush 의 솔루션 expr
(대화식 모드 없음) :
$ expr 20 + 5
25
$ expr 20 + 5 / 2
22
Joshua의 해결책 : awk
(대화식 모드 없음) :
$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333
역 연마 표기법으로 작동하기 때문에 훨씬 더 재미 있습니다.
$ echo 20 5 2 / + p | dc
22
$ echo 4 k 20 5 2 / + p | dc
22.5000
그러나 리버스 광택 표기법을 많이 사용하지 않으면 실용적이지 않습니다.
참고 dc
선행 bc
과 bc
역사적 래퍼로 구현되어 dc
있지만, dc
POSIX에 의해 표준화되지 않았습니다
DQdims 의은 calc
(필수 sudo apt-get install apcalc)
:
$ calc 2 + 4
6
manatwork 의 솔루션 node
(대화식 모드 : node
; 출력 기능 불필요) :
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5
Perl (대화식 모드 :)perl -de 1
:
$ perl -E "say 20+5/2"
22.5
파이썬 (대화식 모드 : python
; 출력 기능 불필요) :
$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5
임의의 정밀도 숫자도 지원합니다.
$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184
당신이 경우 clisp
설치, 당신은 또한 폴란드 표기법을 사용할 수 있습니다 :
$ clisp -x "(+ 2 2)"
Marco 의 솔루션 lua
(대화식 모드 :)lua
:
$ lua -e "print(20+5/2)"
22.5
PHP (대화식 모드 :)php -a
:
$ php -r 'echo 20+5/2;'
22.5
루비 (대화식 모드 : irb
; 출력 기능 불필요) :
$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5
Guile (대화식 모드 :)guile
:
$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5
S-Lang (대화식 모드 : slsh
; 출력 기능 불필요, ;
터미네이터) :
$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000
Tcl (대화식 모드 : tclsh
; 출력 기능 expr
은 필요하지 않지만 ) :
$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5
자바 스크립트 쉘 :
$ smjs
js> 25/3
8.333333333333334
js>
$ jspl
JSC: 25/3
RP: 8.33333333333333
RJS: [object Number]
JSC:
Good bye...
$ node
> 25/3
8.333333333333334
>
SQLite (대화식 모드 :)sqlite3
:
$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5
MySQL :
mysql -BNe 'select 1+1'
PostgreSQL :
psql -tAc 'select 1+1
_mysql과 postgres의 옵션은 '아스키 아트'이미지를 멈 춥니 다!
일반 모드의 R -1000 개의 정규 난수를 생성하고 표준 편차를 가져 와서 인쇄합니다.
$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997
R 은 Using 의 littler 스크립트 - 제곱 인쇄 파이를 할 수 있습니다
$ r -e 'cat(pi^2, "\n")'
9.869604
$ r -e 'print(sum(1:100))'
[1] 5050
PARI / GP , 수 이론, 선형 대수 및 기타 여러 가지를위한 광범위한 컴퓨터 대수 시스템
$ echo "prime(1000)"|gp -q
7919 // the 1000th prime
$ echo "factor(1000)" | gp -q
[2 3]
[5 3] // 2^3*5^3
$ echo "sum(x=1,5,x)" | gp -q
15 // 1+2+3+4+5
GNU Octave (고급 해석 언어, 주로 수치 계산 용)
복소수도 지원합니다.
$ octave
>> 1.2 / 7
ans = 0.17143
>> sqrt(-1)
ans = 0 + 1i
Julia 는 과학 및 수치 컴퓨팅을위한 고성능 언어 및 통역사입니다.
비 대화식 옵션 :
$ julia -E '2.5+3.7'
6.2
whatis bc
-> An arbitrary precision calculator language
흥미 롭습니다 ! 감사!
dc
는 역 폴란드 표기법으로 작동하기 때문에 훨씬 더 재미이다. echo 20 5 + p | dc
그러나 리버스 광택 표기법을 많이 사용하지 않으면 실용적이지 않습니다.
## Command line calculator calc () { bc -l <<< "$@" }
math
우리가 말하는 것처럼 새로운 내장 (또는 지금 불려지는 것)을 연구하고 있습니다. 자유롭게 편집하십시오. 내 대답이 아니며 커뮤니티 위키입니다.
계산하는 방법에는 여러 가지가 있습니다. 간단한 표현식의 경우 bash
자체 를 사용할 수 있습니다 .
echo $((20+5))
또는 expr
:
expr 20 + 5
복잡한 경우에는 훌륭한 도구가 있습니다 bc
.
echo "20+5" | bc
Btw, bc는 근, 대수, cos, sin 등으로 매우 복잡한 표현을 계산할 수 있습니다.
expr
수락 된 답변 에 귀하의 옵션을 추가했습니다 . 수용하고 중앙 집중화 할 하나를 선택해야했습니다.
expr 20+5
. 숫자와 더하기 사이에 공백을 입력해야 작동 expr 20 + 5
합니다. 중요합니다.
언급 된 솔루션은 매우 간단한 계산에는 적합하지만 오류가 발생하기 쉽습니다. 예 :
# without spaces expr 20+5 produces literally 20+5
expr 20+5
→ 20+5
# bc's result doesn't give the fractional part by default
bc <<< 9.0/2.0
→ 4
# expr does only integer
expr 9 / 2
→ 4
# same for POSIX arithmetic expansion
echo $((9/2))
→ 4
# bash arithmetic expansion chokes on floats
echo $((9.0/2.0))
→ bash: 9/2.0: syntax error: invalid arithmetic operator (error token is ".0")
# Most `expr` implementations also have problems with floats
expr 9.0 / 2.0
→ expr: non-integer argument
마지막 오류와 같은 구문 오류는 쉽게 알 수 있지만 삭제 된 부동 부분에 대한 정수 응답은 쉽게 눈에 띄지 않고 잘못된 결과를 초래할 수 있습니다.
그렇기 때문에 항상 Lua와 같은 스크립팅 언어를 사용합니다. 그러나 익숙한 스크립팅 언어를 선택할 수 있습니다. 난 그냥 예를 들어 루아를 사용합니다. 장점은
예 :
lua -e "print(9/2)"
→ 4.5
lua -e "print(9 / 2)"
→ 4.5
lua -e "print(9.0/2)"
→ 4.5
lua -e "print (9 /2.)"
→ 4.5
lua -e "print(math.sqrt(9))"
→ 3
bc
의 결과는 정수가 아니며 그냥 반올림됩니다 scale
. 기본값은 0입니다. 따라서 bc <<< 'scale=4;9.0/2.0'
소수 부분을 원할 경우.
scale
사용하면 추가 해도 bc
되나요? 아마 아닙니다. 영구적으로 변경하는 방법이 있더라도 기본 설정이있는 시스템을 사용하는 경우에는 물릴 것입니다.
scale
만난 이후로 기억 bc
합니다. 그러나 출력 기능 lua
이 put
또는 인지 여부를 항상 잊었습니다 puts
. ;)
bc -l
평범한 것이 아니라 항상 사용하고 bc
걱정하지 마십시오 scale
.
아직 awk를 언급 한 사람이 없습니까?
POSIX 쉘 함수와 awk math power를 사용하여 다음 (한 줄) 함수를 정의하십시오.
calc(){ awk "BEGIN { print $*}"; }
그런 다음 calc 1+1
또는calc 5/2
참고 : 기능을 항상 사용 가능하게하려면 ~ / .bashrc (또는 해당 쉘의 시작 파일)에 추가하십시오.
물론 다음 내용을 가진 "calc"라는 작은 스크립트가 있습니다.
#!/bin/sh -
awk "BEGIN { print $* }"
작동 할 수도 있습니다.
a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
사용할 수 있습니다 bc
. 예 :
$ echo "25 + 5" | bc
30
대안으로 bc <<< 25+5
작동합니다.
또는 단순한 단일 계산 이상을 수행하려는 경우 대화식으로 :
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
25 + 5
30
GNU 구현은 bc
stdin과 stdout이 모두 터미널로 갈 때 시작시 해당 헤더 / 저작권 정보를 인쇄합니다. (GNU 특정) -q
옵션으로 억제 할 수 있습니다 . 자세한 내용은 bc 매뉴얼 페이지를 참조하십시오
ctrl-d
를 종료합니까?
quit
c () { bc -l <<< "$@" }
c
빠르고 쉽게 사용할 수 있는 기능 을 정의합니다 . 예를 들어 c 3/2
당신에게 줄 것이다 1.50000000000000000000
. 그 방법을 설명하는 위의 링크는 죽었습니다.
당신은 사용할 수 있습니다 calc
:
방금 입력하면 calc
다른 인수는 그냥 수학을 일을 계속 할 수있는 대화 형 모드로 들어갑니다. exit를 입력하여 종료합니다 :
C-style arbitrary precision calculator (version 2.12.3.3)
Calc is open software. For license details type: help copyright
[Type "exit" to exit, or "help" for help.]
; 2+4
6
; 3+5
8
; 3.4+5
8.4
; 2^4
16
; exit
또는 식을 인수로 사용하면 답을 제공 한 다음 종료됩니다.
$calc 2 + 4
6
$
calc
와 비슷합니다 bc
. 기본 동작 방식이 더 좋습니다.
calc -e '2+4; 3+5; 3.4+5; 2^4
4 개의 출력 라인을 인쇄하거나 그냥 calc -e 33+(3^3)
.. +1 계산기에 'calc'라는 것을 사용하는 아이디어가 좋습니다 :)
-e
단 하나의 표현이있을 때 옵션이 필요하지 않다는 것을 깨달았습니다 ... 깔끔한! ..
나는 파이썬을 시작하고 그것을 대화 형 계산기로 사용하는 것을 좋아합니다 (그러나 다시 파이썬 프로그래머입니다).
screen
파이썬을 실행하는 데 항상 하나의 창이 있습니다.
아무도 언급하지 않았으며 계산기가 아니지만 (그러나이 범용 스크립트 언어는 아닙니다) 언급하고 싶습니다 units
.
$ units "1 + 1"
Definition: 2
$ units "1 lb" "kg"
* 0.45359237
/ 2.2046226
또는 출력 $()
을 줄이려면 무언가에 할당하는 데 사용할 수있는 숫자 만 얻을 수 있습니다 .
$ units -t "1 + 1"
2
$ units -t "1 lb" "kg"
0.4539237
온도 변환도
$ units -t "tempC(20)" "tempF"
68
추가 계산을 위해 식에서 온도 변환을 얻으려면 다음을 수행하십시오.
$ units -t "~tempF(tempC(20))+1"
68.1
$> ghc -e '20 + 5'
25
it :: Integer
또한 인터랙티브 모드 ghci
의 글래스고-해스켈 컴파일러 ( ghc --interactive
,로 식을 평가하는 것과는 대조적으로 -e
)는 매혹적인 "계산기"를 만듭니다.
$>ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> pi
3.141592653589793
Prelude> ceiling pi
4
Prelude> compare 1 2
LT
ghc
Glasgow Haskell Compiler 를 의미합니까?
파이썬 표현식을 평가하고 결과를 인쇄하는 작은 파이썬 스크립트를 사용하면 다음과 같은 것을 실행할 수 있습니다
$ pc '[i ** 2 for i in range(10)]'
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
스크립트는 다음과 같습니다
#!/usr/local/bin/python3
import sys
import traceback
from codeop import CommandCompiler
compile = CommandCompiler()
filename = "<input>"
source = ' '.join(sys.argv[1:]) + '\n'
try:
code = compile(source, filename)
except (OverflowError, SyntaxError, ValueError):
type, value, sys.last_traceback = sys.exc_info()
sys.last_type = type
sys.last_value = value
if filename and type is SyntaxError:
# Work hard to stuff the correct filename in the exception
try:
msg, (dummy_filename, lineno, offset, line) = value.args
except ValueError:
# Not the format we expect; leave it alone
pass
else:
# Stuff in the right filename
value = SyntaxError(msg, (filename, lineno, offset, line))
sys.last_value = value
lines = traceback.format_exception_only(type, value)
print(''.join(lines))
else:
if code:
exec(code)
else:
print('incomplete')
불행히도 나는 대부분의 코드를 어디서 빌 렸는지 기억하지 못하므로 인용 할 수 없습니다.
print(eval(' '.join(sys.argv[1:])))
같은 일을?
gnuplot-대화식 플로팅 프로그램
위의 링크를 따르거나gnuplot
프롬프트를입력한 다음 gnuplot 인터프리터help
내부에 입력하십시오. Gnuplot 은 데이터를 플롯하기 위해 태어난 프로그램이지만 계산에도 사용할 수 있습니다. 기능을 정의하거나 내장 기능을 사용할 수 있다는 이점을 제공합니다.
echo "pr 20+5/2" | gnuplot # Lazy-note `pr` instead of print
22 # Integer calculation & result
echo "pr 20.+5/2" | gnuplot # Lazy-note `pr` instead of print
22.0 # Floating point result
echo "pr sin(2*pi/3.)" | gnuplot # Some functions ...
0.866025403784439
ROOT 시스템은 매우 효율적인 방법으로 많은 양의 데이터를 처리하고 분석하는 데 필요한 모든 기능을 갖춘 OO 프레임 워크의 집합을 제공합니다 ...
당신은로 사용할 수 있습니다 C 인터프리터 , CINT , 또는 당신이 중 하나를 사용할 수 있습니다 많은 다른 많은 C 통역 . IMHO는 거대하고 복잡하며 강력하며 항상 친절하지는 않지만 큰 만족감을 줄 수 있습니다.
당신이 정말로 Confucio 를 인용하는 당신의 작은 목소리를 듣고 싶지 않고 바퀴에서 (버터) 파리를 깰 준비가되어 있다면 root 를 사용할 수 있습니다 . 이 경우 -l
스플래시 화면을 표시하지 않으려면 필수입니다 ...
echo "20+5/2" | root -l
(const int)22
echo "20+5/2." | root -l
(const double)2.25000000000000000e+01
echo "cout<< 20+5/2 << endl;" | root -l
22
bash
echo $(( 1+1 ))
fish
math 1+1
zsh*
echo $((1+1))
* : 그리고 ksh93, yash
bash
awk "BEGIN {print 10/3}"
(낮은 정밀도)bash
echo "10/3"|bc -l
(높은 정확도)fish
math -s4 10/3
zsh*
echo $((10./3))
* : 그리고 ksh93, yash
물론 최소한의 타이핑으로 awk를 사용하도록 쉘을 구성 할 수 있습니다 calc 10/3
(bash 1 및 fish 2 에 대해 수행하는 방법에 대한 참고 사항 참조 ).
bash에 awk를 제안하는 주된 이유는 거의 모든 유닉스 계열 OS에 사전 설치되어 있고 bc -l
20 보다 작은 20 자릿수를 인쇄하는 것보다 덜 정확하지만 인간 친화적 인 출력으로 합리적으로 가볍습니다 (물론 프로세스 시작 비용이 있음) 숫자 ( 더 많은 십진수를 얻기 위해 awk를 확실히 조정할 수는 있지만 ).
이 bash 함수를 다음에 추가하십시오 ~/.bashrc
.
calc(){ awk "BEGIN { print $*}"; }
calc
피쉬 함수 (예 /home/ndemou/.config/fish/functions/calc.fish
: 라는 텍스트 파일 )를 만듭니다 .
function calc
awk "BEGIN{ print $argv }" ;
end
awk
시스템의 double
부동 소수점 유형을 사용하므로 임의의 정밀도를 수행하지 않는 대부분의 다른 도구와 마찬가지로 정확 합니다 (gawk는 임의의 정밀도를 수행 할 수 있음에 유의하십시오). 변수를 awk
사용하여 OFMT
출력을 위해 숫자를 문자열 표현으로 변환합니다 ( %.6g
기본적으로 %.17g
더 높은 정밀도 를 원한다면이 를 변경할 수 있습니다 ).
bc
. math "scale=4; 10/3"
더 이상 작동하지 않는 최신 버전에서는 더 이상 사용되지 않습니다 ( math -s4 10/3
대신 지금)
math -s4
했습니다 (이전 버전에서도 지원되는 것 같습니다)
SQLite :
echo 'select 1 + 1;' | sqlite3
MySQL :
mysql -e 'select 1 + 1 from dual;'
PostgreSQL :
psql -c 'select 1 + 1 as sum;'
from dual
Oracle이 필요로하며 MySQL은 절 select
없이 할 수 from
있습니다. 2) PostgreSQL에는 별칭이 필요하지 않습니다. 3) ;
는 SQLite에서만 필요합니다. 4) MySQL과 PostgreSQL은 데이터베이스 서버에 연결할 수있는 경우에만 작동합니다. 5) MySQL과 PostgreSQL은 결과를 중심으로 ASCII 아트 테이블을 그립니다. 값만 얻으려면 : mysql -BNe 'select 1+1'
및 psql -tAc 'select 1+1
.
제공된 프로그램을 통해 GNU 다중 정밀도 산술 라이브러리 를 사용하십시오 run-expr
.
tar -xvf gmp-5.1.3.tar.lz
./configure
그리고 make
(설치 필요 없음)make run-expr
~/bin
디렉토리 에 심볼릭 링크를 만들고 싶습니다 .ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
alias calcf='run-expr -f'
부동 소수점 평가산출:
# calcf '2/3'
"2/3" base 0: result 0.666666666666666666667e0
로부터 run-expr.c
파일 :
Usage: ./run-expr [-z] [-q] [-f] [-p prec] [-b base] expression...
Evaluate each argument as a simple expression. By default this is in mpz
integers, but -q selects mpq or -f selects mpf. For mpf the float
precision can be set with -p. In all cases the input base can be set
with -b, or the default is "0" meaning decimal with "0x" allowed.
기능 클래스의 차이점과 세부 사항 은 설명서 를 참조 하십시오.
bc
의-l
옵션에 대해 읽는 것이 좋습니다.