expr과 변수를 사용한 산술 연산

expr과 변수를 사용한 산술 연산

이 진술이 작동하지 않는 이유는 무엇입니까?

total=`expr $mPercent / 100 "*" .482 + $fPercent / 100 "*" .518`

mPercent 및 fPercent는 awk 문에서 얻은 숫자입니다. 또한 오류 메시지로 "expr: 숫자가 아닌 인수"가 표시됩니다.

노트:그의 질문의 목적을 위해 두 변수의 값이 3.27이라고 가정해 보겠습니다.

답변1

bash부동 소수점 연산은 수행할 수 없으며 정수 연산만 수행할 수 있습니다. 대신 다음을 사용하는 것이 좋습니다 bc -l.

$ mPercent='2.72'
$ fPercent='3.14'
$ bc -l <<< $(echo "$mPercent / 100 "*" .482 + $fPercent / 100 "*" .518")
.02937560000000000000

답변2

expr명령은 정수 또는 문자열 작업만 수행할 수 있습니다. 이 가이드의 매뉴얼 페이지를 확인하세요.

피연산자는 정수 또는 문자열일 수 있습니다. 정수는 선택적으로 앞에 "-"가 붙은 하나 이상의 십진수로 구성됩니다. 'expr' 적용된 연산에 따라 피연산자 위치에 나타나는 모든 항목을 정수 또는 문자열로 변환합니다.

따라서 이러한 작업을 수행하려면 다음과 같은 명령줄 계산기를 사용해야 합니다 bc.

$ mPercent='.123'
$ fPercent='.345'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.00237996000000000000

노트: exprBash의 일부가 아니며 독립형 실행 파일이며 coreutils 패키지의 일부입니다. RPM을 사용하는 시스템에서는 다음과 같은 내용을 볼 수 있습니다.

$ rpm -qf $(type -p /usr/bin/expr)
coreutils-8.21-13.fc19.x86_64

3.27의 의견에 있는 2개의 변수에 대해 제공한 데이터를 사용하면 다음과 같은 결과가 나옵니다.

$ mPercent='3.27'
$ fPercent='3.27'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.03270000000000000000

답변3

내 제안은 bc산술 연산과<<< (여기에 문자열이 있습니다)에 값을 입력하는데 사용됩니다 bc.

$ mPercent=3.27
$ fPercent=3.27

$ bc -l <<< "$mPercent / 100 * .482 + $fPercent / 100 * .518"
.03270000000000000000

여기의 -l옵션을 사용 bc하면 더 많은 수학 함수와 함께 부동 소수점 연산을 사용할 수 있습니다.

관련 정보