답변:
예, bash의 내장 산술 확장$(( ))
을 사용하여 간단한 수학을 수행 할 수 있습니다.
$ echo "$((5 * 5))"
25
전체 연산자 목록은 Bash Reference Manual 의 Shell Arithmetic 섹션을 확인하십시오 .
배시 지원 연산 확장 과이 $(( expression ))
. 예를 들면 :
$ echo $(( 5 * 5 ))
25
많은 유틸리티가 bc 및 expr을 포함한 산술을 제공합니다 .
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
고전적인 솔루션은 다음과 같습니다.
expr 5 \* 5
또 다른 좋은 옵션은 다음과 같습니다.
echo 5 5\*p | dc
이 두 솔루션은 정수 피연산자에서만 작동합니다.
k
있습니다. 기본 정밀도가 0 (정수로 잘림)이라는 것을 확실히 기억합니다. 내가 잘못 기억하고 있습니까, 아니면 단순히 새로운 구현으로 인해 동작이 변경 되었습니까?
dc
더 대수적이고 RPN이 적기 때문에 몇 년 동안 거의 사용 하지 않아서 기억이 나지 않습니다. 내가 사용하고있는 GNU 시스템에서 기본값은 0입니다. 오래된 (1993) FreeBSD man
페이지 에서는 기본값이 0이라고 언급하지만 이전 BSD man
페이지 는 그렇지 않습니다.
echo '4 k 50.5 7 / p' | dc
작동합니다 (출력 :) 7.2142
.
bc
부동 소수점 계산 을 사용 하고 지원 하는이 함수를 사용 합니다.
c () {
local a
(( $# > 0 )) && a="$@" || read -r -p "calc: " a
bc -l <<< "$a"
}
예:
$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797
Bash의 산술 확장은 float를 지원하지 않습니다 (하지만 Korn 쉘과 zsh는 지원합니다).
예:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
이것을 위해 사용하는 간단한 스크립트가 있습니다.
me@mycomputer:~$ cat /usr/local/bin/c
#!/bin/sh
echo "$*" | sed 's/x/\*/g' | bc -l
셸의 특수 문자 이기 때문에 로 변경 x
됩니다 . 다음과 같이 사용하십시오.*
*
c 5x5
c 5-4.2 + 1
c '(5 + 5) * 30'
(식에 괄호가 포함되어 있으면 여전히 따옴표를 사용해야합니다).tr
여러 문자에 대한 문자 매핑을 수행하는 데 사용할 수 있습니다.
파이썬을 좋아하고 패키지를 설치할 수있는 옵션이 있다면 내가 만든 이 유틸리티 를 사용할 수 있습니다 .
# install pythonp
python -m pip install pythonp
pythonp "5*5"
25
pythonp "1 / (1+math.exp(0.5))"
0.3775406687981454
# define a custom function and pass it to another higher-order function
pythonp "n=10;functools.reduce(lambda x,y:x*y, range(1,n+1))"
3628800
dc
수레와 함께 작동합니다. 시도해보십시오echo '4 k 50 7 / p' | dc
. 출력은7.1428
. 이k
명령은 정밀도를 설정합니다.