10진수가 bc 범위 내에 있는지 확인하세요.

10진수가 bc 범위 내에 있는지 확인하세요.

나는 다음과 같이 작성했지만 분명히 작동하지 않으며 여전히 극복할 수 없습니다.

#LASTEFFECTIVEHASH
if (( $(echo "$LASTEFFECTIVEHASHMINVAL < $LASTEFFECTIVEHASH < $LASTEFFECTIVEHASHMAXVAL" | $BC -l) )); then
                echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $LOGFILE
else
                echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is not between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $MSGFILE $LOGFILE
fi

그러나 값이 범위를 벗어나면 다음과 같은 결과가 발생합니다.

20170810003646 - LASTEFFECTIVEHASH=139.2 is between 104.9 and 136.9

나는 수학 구문을 따릅니다. x > 104.9이고 < 136.9인 경우 수학에서는 104.9 < x < 136.9. 하지만 나는 bash/bc가 내 수학 선생님과 다르게 행동한다고 ​​생각합니다.

bc가 137까지 셀 수 없다면 정말 좋을 것 같아요 ;)

답변1

Python과 달리 bc연쇄 비교를 지원하지 않습니다.

a < b < c

이 두 비교를 수행하고 둘 다 참이 되도록 요구하려면 논리 AND를 사용하십시오(GNU bc 필요).

(a < b) && (b < c)

예를 들어:

$ a=104.9; b=136; c=136.9; if echo "($a < $b) && ($b < $c)" | bc -l | grep -q 1; then echo True; else echo False; fi
True
$ a=104.9; b=137; c=136.9; if echo "($a < $b) && ($b < $c)" | bc -l | grep -q 1; then echo True; else echo False; fi
False

POSIX BC

GNU bc가 없으면 논리 AND를 곱셈으로 바꿀 수 있습니다.

$ a=104.9; b=136; c=136.9; if echo "($a < $b)*($b < $c)" | bc -l | grep -q 1; then echo True; else echo False; fi
True
$ a=104.9; b=137; c=136.9; if echo "($a < $b)*($b < $c)" | bc -l | grep -q 1; then echo True; else echo False; fi
False

관련 정보