Linux 쉘 스크립트( )에 문제가 있습니다 sh
.
조합을 계산하는 스크립트를 작성하려고 하는데 함수를 계산하려고 하면 오버플로가 발생하는 것 같습니다. 그래서 다른 기술을 시도하고 있어요. 이 기술에서는 다음을 사용했습니다.
a=`expr $var1 \* $var2 / $var3`
이렇게 하면 오류가 발생하며 분명히 이 작업을 수행할 수 없습니다.
a=`expr ($var1 \* $var2) / $var3`
왜냐하면 이것은 또한 오류를 발생시키기 때문입니다.
어떻게 해야 합니까?
답변1
dc
임의의 정밀도 결과 에 이를 사용할 수 있습니다 .
precision=4 var1=3 var2=4 var3=5
a=`echo "$precision k $var1 $var2 * $var3 /p" | dc`
이는 1977년경 이후 거의 모든 Unix 변종에서 작동할 것입니다. gnu dc를 사용할 수 있다는 것을 알고 있다면 더 간단합니다.
a=`dc -e "$precision k $var1 $var2 * $var3 /p"`
사용할 수 있습니다.
답변2
괄호가 있는 예의 경우 괄호도 이스케이프해야 합니다. ( expr \( $var1 + $var2 \) / $var3
공백을 생략하지 마십시오. 그렇지 않으면 expr
오류가 발생합니다).
bash
다음과 같이 내장된 산술 확장을 사용할 수도 있습니다 .echo $(( ($var1+$var2)/$var3 ))
bc
중위 계산의 경우 ( dc
역 폴란드 표기법의 경우) 가 있습니다 .