쉘 스크립트에서 부동 소수점 값을 빼는 방법

쉘 스크립트에서 부동 소수점 값을 빼는 방법

부동 소수점 값을 사용하는 스크립트가 있는데 두 개의 부동 소수점을 뺄 수 없는 이유가 있습니다.

샘플 코드입니다

#!/bin/bash

p="1"
h="10"
m=$(echo "3.5"| bc -l)
for (( c=$p; c<=$h; c++ ))
do
   r=$(echo "($p-$m)"| bc -l)

   echo "Z $c $m $r"
done

그리고 이게 그 결과야

Z 1 3.5 -2.5
Z 2 3.5 -2.5
Z 3 3.5 -2.5
Z 4 3.5 -2.5
Z 5 3.5 -2.5
Z 6 3.5 -2.5
Z 7 3.5 -2.5
Z 8 3.5 -2.5
Z 9 3.5 -2.5
Z 10 3.5 -2.5

답변1

줄을 바꾸세요

   r=$(echo "($p-$m)"| bc -l)

에게

   r=$(echo "($c-$m)"| bc -l)

그렇지 않지만 $p루프 $c에 의해 변경됩니다.

답변2

bash부동 소수점 연산을 지원하지 않습니다. ksh그리고 zsh그렇게. POSIXLy, bc다음 중 하나를 사용할 수 있습니다 .플로리안의 대답제안하거나 awk. 예를 들어,

$ awk 'BEGIN{print 2.5+3.7}'
6.2

Python우분투(Ubuntu ) 도 Perl부동 소수점 계산을 수행할 수 있는 기능을 갖추고 있습니다.

$ perl -le 'print(2.5+3.7)'
6.2

$ python3 -c 'print(2.5+3.7)'
6.2

다른 옵션의 매우 광범위한 목록도 참조하세요.Bash 또는 다른 언어/프레임워크에서 정수 및 부동 소수점 계산을 수행하는 방법은 무엇입니까?

또한 에 따르면POSIX 쉘 언어 표준산술 확장에서 $((...)):

부호 있는 긴 정수 연산만 필요합니다. 확장 기능으로 쉘은 나열된 것 이상의 연산 표현식을 인식할 수 있습니다.

따라서 부동 소수점 연산을 생략하면 bashPOSIX /bin/dash사양을 따릅니다.

답변3

늦었다는 건 알지만 결과가 구글에 나오니까 누군가 이 글을 읽을 수도 있겠네요. 해결책은 "$a- $b"로 작성하는 것입니다. 공간은 나를 위해 일하게 만듭니다.

관련 정보