![expr과 변수를 사용한 산술 연산](https://linux55.com/image/58573/expr%EA%B3%BC%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%EC%82%B0%EC%88%A0%20%EC%97%B0%EC%82%B0.png)
이 진술이 작동하지 않는 이유는 무엇입니까?
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
노트: expr
Bash의 일부가 아니며 독립형 실행 파일이며 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
하면 더 많은 수학 함수와 함께 부동 소수점 연산을 사용할 수 있습니다.