명령 줄 터미널에서 곱하기


115

실험실 실험에 입력을 제공하기 위해 직렬 터미널을 사용하고 있습니다. 나는

$ echo "5X5"

문자열을 반환합니다 "5X5". 곱하기 연산을 실행하는 명령이 있습니까?

답변:



45

보다 고급적이고 정확한 수학을 위해 bc (1) 사용을 고려하십시오.

echo "3 * 2.19" | bc -l 
6.57

19

내부 방법

배시 지원 연산 확장 과이 $(( expression )). 예를 들면 :

$ echo $(( 5 * 5 ))
25

외부 방법

많은 유틸리티가 bcexpr을 포함한 산술을 제공합니다 .

$ echo '5 * 5' | /usr/bin/bc
25

$ /usr/bin/expr 5 \* 5
25

15

고전적인 솔루션은 다음과 같습니다.

 expr 5 \* 5

또 다른 좋은 옵션은 다음과 같습니다.

 echo 5 5\*p | dc

이 두 솔루션은 정수 피연산자에서만 작동합니다.


1
dc수레와 함께 작동합니다. 시도해보십시오 echo '4 k 50 7 / p' | dc. 출력은 7.1428. 이 k명령은 정밀도를 설정합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

@Dennis dc의 두 가지 다른 구현에서을 통해 할당하지 않고도 float 작업이 작동하는 것을 볼 수 k있습니다. 기본 정밀도가 0 (정수로 잘림)이라는 것을 확실히 기억합니다. 내가 잘못 기억하고 있습니까, 아니면 단순히 새로운 구현으로 인해 동작이 변경 되었습니까?
윌리엄 Pursell

나는 dc더 대수적이고 RPN이 적기 때문에 몇 년 동안 거의 사용 하지 않아서 기억이 나지 않습니다. 내가 사용하고있는 GNU 시스템에서 기본값은 0입니다. 오래된 (1993) FreeBSD man페이지 에서는 기본값이 0이라고 언급하지만 이전 BSD man페이지 는 그렇지 않습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

그건 그렇고 (미래의 독자를 위해) 내 예제는 주장을 정확하게 반박하기 위해 정수가 아닌 결과 대신 정수가 아닌 피연산자 를 표시해야했습니다 . 두려워하지 말고 echo '4 k 50.5 7 / p' | dc작동합니다 (출력 :) 7.2142.
추후 공지가있을 때까지 일시 중지되었습니다.

8

간단한 쉘 함수 (sed 필요 없음)는 '5X5'를 해석하는 트릭을 수행해야합니다.

$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25

6

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

4

이것을 위해 사용하는 간단한 스크립트가 있습니다.

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' (식에 괄호가 포함되어 있으면 여전히 따옴표를 사용해야합니다).

곱셈에 "x"를 사용하는 것이 좋습니다. 인용 할 필요가 없도록 괄호 대신 대괄호를 비슷하게 사용할 수 있습니다. tr여러 문자에 대한 문자 매핑을 수행하는 데 사용할 수 있습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

3

파이썬을 좋아하고 패키지를 설치할 수있는 옵션이 있다면 내가 만든 이 유틸리티 를 사용할 수 있습니다 .

# 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.