ksh에서 두 개의 부동 소수점 값을 비교하는 방법은 무엇입니까?

ksh에서 두 개의 부동 소수점 값을 비교하는 방법은 무엇입니까?

부동 소수점 값을 비교하는 다음 명령은 bash에서는 잘 작동하지만 AIX의 ksh에서는 작동하지 않습니다.

if (( $(bc <<< " 5.3 >= 5.3") ));then echo "hi";else echo "bye";fi`,

나는 여러 가지 방법을 시도했는데 누구든지 이것을 달성하는 방법을 제안할 수 있습니까?

답변1

~에 따르면BC의 POSIX 표준:

다른 모든 연산자와 달리 관계 연산자("<", ">", "<=", "">=", "==", "!=")는 if, while 또는 for 문에서만 사용됩니다. 내부에.

이는 간단한 비교를 통해 true 또는 false를 평가할 수 있는 GNU/Linux 확장인 것으로 보입니다.

bc의 출력이 1인지 0인지 확인하는 대신 test다음을 사용하세요.

if [ 5.3 -ge 5.3 ]; then echo hi; else echo bye; fi

또는 산술 확장(ksh93)을 사용하십시오.

if (( 5.3 >= 5.3 )); then echo hi; else echo bye; fi

아니면 awk를 사용하세요:

if awk -v x=5.3 -v y=5.3 'BEGIN { exit (x >= y) ? 0 : 1 }'; then echo hi; else echo bye; fi

답변2

다음과 같이 값을 확인할 수도 있습니다.

$ fat=5.3
$ slim=5.3
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'=='$slim |bc -l
1

출력: 0=false 및 1=true

답변3

이 유틸리티를 사용하여 dc셸에서 작업을 수행할 수 있습니다. $n1 >= $n2인 경우 math명령은 을 인쇄하고 hi, 그렇지 않으면 a를 표시합니다.stdoutbye

n1=5.3 n2=5.3
dc -e "[[hi]]sa [r]sb $n1 $n2 !>a [bye] z2=bp"

       $n1  $n2   o/p
 1.    5.3, 5.3 => hi
 2.    5.3, 5.2 => hi
 3.    5.3, 5.4 => bye

관련 정보