비교 연산자를 사용하려고 하는데 bc
"라인 1 stdin의 구문 오류" 오류가 발생합니다. korn은 부동 소수점을 잘 처리하지 못하기 때문에 korn 스크립트에서 비교 기능을 사용해야 합니다. 사용 예는 다음과 같습니다.
echo "scale=2; 3.2 > 3" | bc
답변1
bc
당신이 하는 일은 POSIX와 호환 되어야 합니다 . 그러나 bc는 상대적으로 거의 사용되지 않는 도구이며 일부 구현에는 버그가 있을 수 있습니다. 합계 비교보다 더 고급 수학 함수를 사용하지 않는 경우에는 A, W 및 K의 원래 구현에서도 부동 소수점 연산을 지원할 +-*/
수 있습니다 .awk
echo 3.2 | awk '{exit !($0 > 3)}'
답변2
expr은 이와 같은 부동 소수점 비교를 처리할 수 있습니다.
ksh -c '(( $(expr 3.2 \> 3) == 1 )) && echo 1 || echo 0'
또는 다음과 같은 스크립트에서 사용하십시오.
#!/usr/bin/ksh
if [ $(expr $1 \> $2) == 1 ]; then
echo "greater"
else
echo "lesser"
fi
위에서 사용한 bc 라인은 Linux에서는 작동하지만 Solaris에서는 작동하지 않으므로 expr의 이식성이 더 뛰어날 수 있습니다. expr을 사용하면 두 운영 체제 모두에서 동일하게 작동합니다.
답변3
가능하다면 시도해 보세요.dc
:
echo "2 k 3.2 3 [1p] sa <a" | dc
위의 코드에서는 첫 번째 숫자(위 예에서는 3.2)가 두 번째 숫자(위의 3.2)보다 큰 경우 2 소수점 정밀도를 사용하고 1을 출력합니다. 그러나 그렇지 않으면 아무것도 출력되지 않습니다.
dc
네 bc
, GNU 문서에는 "임의의 정밀도 계산기"라는 같은 단어로 설명되어 있습니다. 일부 배포판에서는 동일한 패키지로 제공되지만 다른 배포판에서는 별도로 패키지되어 제공됩니다.