쉘 연산에서 구문 오류가 발생하는 이유는 무엇입니까?

쉘 연산에서 구문 오류가 발생하는 이유는 무엇입니까?

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역 폴란드 표기법의 경우) 가 있습니다 .

관련 정보