외부 명령을 사용하지 않고 bash로 부동 소수점 연산을 수행할 수 있습니까? [복사]

외부 명령을 사용하지 않고 bash로 부동 소수점 연산을 수행할 수 있습니까? [복사]

bash외부 명령을 사용하지 않고도 정수 연산을 수행할 수 있다는 내용을 읽었습니다 . 예를 들면 다음과 같습니다.

echo "$((3 * (2 + 1)))"

외부 명령을 사용하지 않고 부동 소수점 연산을 수행할 수 있습니까 bash?

답변1

아니요.

Bash 자체는 부동 소수점 연산을 수행할 수 없습니다.


이는 귀하가 찾고 있는 내용이 아니지만 다른 사람들에게는 도움이 될 수 있습니다.

대안

  1. bc

bc부동소수점 연산이 허용되며 정수라도 값을 설정하여 부동소수점으로 변환할 수 있습니다 scale. (이 scale값은 내부 나눗셈에만 영향을 미치지 bc만 해결 방법은 모든 수식을 1로 나누어 종료하는 것입니다.)

$ echo '10.1 / 1.1' | bc -l
9.18181818181818181818
$ echo '55 * 0.111111' | bc -l
6.111105
$ echo 'scale=4; 1 + 1' | bc -l
2
$ echo 'scale=4; 1 + 1 / 1' | bc -l
2.0000

  1. awk

awk이는 그 자체로 프로그래밍 언어이지만 쉽게 활용하여 bash 스크립트에서 부동 소수점 작업을 수행할 수 있지만 이것이 할 수 있는 전부는 아닙니다!

echo | awk '{print 10.1 / 1.1}'
9.18182
$ awk 'BEGIN{print 55 * 0.111111}'
6.11111
$ echo | awk '{print log(100)}'
4.60517
$ awk 'BEGIN{print sqrt(100)}'
10

나는 echoPiped to awk와 a를 사용하여 BEGIN이 작업을 수행하는 두 가지 방법을 보여줍니다. 입력을 읽기 전에 문의 모든 내용이 awk BEGIN실행되지만, 입력이 없으면 BEGIN 문은 awk실행되지 않으므로 이에 대한 입력을 제공해야 합니다.


  1. Perl

Bash 스크립트에서 사용할 수 있는 또 다른 프로그래밍 언어입니다.

$ perl -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(perl -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105

  1. Python

Bash 스크립트에서 사용할 수 있는 또 다른 프로그래밍 언어입니다.

$ python -c 'print 10.1 / 1.1'
9.18181818182
$ somevar="$(python -c 'print 55 * 0.111111')"; echo "$somevar"
6.111105

  1. Ruby

Bash 스크립트에서 사용할 수 있는 또 다른 프로그래밍 언어입니다.

$ ruby -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(ruby -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105

답변2

"Bash는 외부 명령을 사용하지 않고도 부동 소수점 작업을 수행할 수 있나요?"

아니요.

robert@pip2:/tmp$ echo $((2.5 * 3))
bash: 2.5 * 3: syntax error: invalid arithmetic operator (error token is ".5 * 3")

관련 정보