Bash 논리 테스트를 이해하려고 하면 결과는 반대입니다.

Bash 논리 테스트를 이해하려고 하면 결과는 반대입니다.

이게 왜 0인가요?

$ echo $(( 0 && 0 ))
0

이게 왜 0인가요?

$ echo $(( 1 && 0 ))
0

이게 왜 0인가요?

$ echo $(( 0 && 1 ))
0

이게 왜 1인가요?

$ echo $(( 1 && 1 ))
1

답변1

이는 "와 일치합니다.논리합”, 이것이 &&산술적 맥락에서 의미하는 바입니다. 진리표는 다음과 같습니다.

  |  F  |  T
--+-----+-----
F |  F  |  F
--+-----+-----
T |  F  |  T

"A와 B"는 A와 B가 모두 참인 경우에만 참입니다.

쉘의 산술적 맥락에서 연산자는 다음과 같습니다.C 표준에 정의된 대로 구현됨여기서 "true"는 0이 아닌 값이고 "false"는 0입니다. 이는 실제로 "true"(또는 "성공")가 0이고 "false"(또는 "오류")가 0이 아닌 값인 종료 코드의 반대입니다.

또한보십시오:

$ echo $((2 && 2))
1

$ echo $((-1 && 2))
1

답변2

man $SHELL

말하다

&&     logical AND

따라서 규칙은 왼쪽이 TRUE인 경우에만 오른쪽이 평가된다는 것입니다. 0과 1 규칙을 사용하고 있기 때문입니다. 0은 거짓, 1은 참입니다.

이제 코드에 대해 논의한 후 설명하겠습니다.

echo $(( 0 && 0 ))

&& - 왼쪽이 0이므로 오른쪽은 평가되지 않으므로 0이 인쇄됩니다.

$ echo $(( 1 && 0 ))

&& - 왼쪽이 1이므로 오른쪽을 평가합니다. 불행히도 오른쪽은 0이므로 0이 인쇄됩니다.

echo $(( 0 && 1 ))

&& - 왼쪽이 0이므로 오른쪽은 평가되지 않으므로 0이 인쇄됩니다.

echo $(( 1 && 1 ))

&& - 왼쪽이 1이고 오른쪽도 1이므로 오른쪽을 평가하므로 1이 인쇄됩니다.

편집하다

한 사용자가 지적했듯이 SHELL은 &&단락 속성(논리적 속성도 포함)을 가지고 있습니다. 논리가 항상 단락된다는 의미는 아닙니다.

관련 정보