두 숫자를 비교하고 싶습니다 bc
. 이에 따르면StackOverflow에서 높은 평가를 받은 답변, 다음과 같이 할 수 있습니다.
printf '%s\n' '1.2 > 0.4' | bc
bc
명령문이 참임을 나타내기 위해 STDOUT으로 전송됩니다 1
(또는 명령문이 거짓인 경우 0).
다른 모든 연산자와 달리 관계 연산자("<", ">", "<=", "">=", "==", "!=")는 if, while 또는 for 문에서만 사용됩니다. 내부에.
제가 잘못 이해한 것일 수도 있지만 언어에서는 위 예의 구문을 허용하지 않는 것 같습니다.
관계 연산자를 독립적으로 사용하면 bc
POSIX를 위반합니까? 그렇다면 예제를 어떻게 다시 작성해야 합니까?
답변1
제가 잘못 이해한 것일 수도 있지만 언어에서는 위 예의 구문을 허용하지 않는 것 같습니다.
이 예에서는 bc 언어에 자체 확장을 추가하는 GNU bc를 가정합니다. 기록된 대로수동-s
, 정확한 POSIX bc 언어를 처리하도록 하거나 -w
확장에 대해 경고하도록 하려면 이 스위치를 사용해야 합니다 .
$ echo '1.2 > 0.4' | bc -s
(standard_in) 2: Error: comparison in expression
$ echo '1.2 > 0.4' | bc -w
(standard_in) 2: (Warning) comparison in expression
1
$ echo '1.2 > 0.4' | bc
1
그렇다면 예제를 어떻게 다시 작성해야 합니까?
$ printf 'if(%s > %s){a=1};a\n' 1.2 0.4 | bc -s
1
더 짧고 접근하기 쉬운 버전을 제공한 @icarus에게 감사드립니다.