부동 소수점 값을 비교하는 다음 명령은 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를 표시합니다.stdout
bye
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