사용 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
POSIX 툴 체스트
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)"
$ 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
>
다양한 SQL :
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
답변
계산하는 방법에는 여러 가지가 있습니다. 간단한 표현식의 경우 bash
자체 를 사용할 수 있습니다 .
echo $((20+5))
또는 expr
:
expr 20 + 5
복잡한 경우에는 훌륭한 도구가 있습니다 bc
.
echo "20+5" | bc
Btw, bc는 근, 대수, cos, sin 등으로 매우 복잡한 표현을 계산할 수 있습니다.
답변
언급 된 솔루션은 매우 간단한 계산에는 적합하지만 오류가 발생하기 쉽습니다. 예 :
# 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
답변
아직 awk를 언급 한 사람이 없습니까?
POSIX 쉘 함수와 awk math power를 사용하여 다음 (한 줄) 함수를 정의하십시오.
calc(){ awk "BEGIN { print $*}"; }
그런 다음 calc 1+1
또는calc 5/2
참고 : 기능을 항상 사용 가능하게하려면 ~ / .bashrc (또는 해당 쉘의 시작 파일)에 추가하십시오.
물론 다음 내용을 가진 “calc”라는 작은 스크립트가 있습니다.
#!/bin/sh -
awk "BEGIN { print $* }"
작동 할 수도 있습니다.
답변
사용할 수 있습니다 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 매뉴얼 페이지를 참조하십시오
답변
당신은 사용할 수 있습니다 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
. 기본 동작 방식이 더 좋습니다.
답변
나는 파이썬을 시작하고 그것을 대화 형 계산기로 사용하는 것을 좋아합니다 (그러나 다시 파이썬 프로그래머입니다).