bc: POSIX는 관계 연산자의 독립형 사용을 금지합니까?

bc: POSIX는 관계 연산자의 독립형 사용을 금지합니까?

두 숫자를 비교하고 싶습니다 bc. 이에 따르면StackOverflow에서 높은 평가를 받은 답변, 다음과 같이 할 수 있습니다.

printf '%s\n' '1.2 > 0.4' | bc

bc명령문이 참임을 나타내기 위해 STDOUT으로 전송됩니다 1(또는 명령문이 거짓인 경우 0).

POSIX 페이지에 따르면bc:

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

제가 잘못 이해한 것일 수도 있지만 언어에서는 위 예의 구문을 허용하지 않는 것 같습니다.

관계 연산자를 독립적으로 사용하면 bcPOSIX를 위반합니까? 그렇다면 예제를 어떻게 다시 작성해야 합니까?

답변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에게 감사드립니다.

관련 정보