OR 및 AND 연산자가 함께 작동하여 부울 값을 변수로 설정하는 방법

OR 및 AND 연산자가 함께 작동하여 부울 값을 변수로 설정하는 방법

이 코드 줄이 어떻게 작동하는지 이해하려고 노력 중입니다. 예를 들어, 처음에 로 설정된 세 개의 변수 Value_1가 있습니다 . 위의 세 변수가 모두 false로 설정된 경우(또는 세 변수 중 하나라도 false로 설정된 경우) false로 설정되는 또 다른 네 번째 변수가 있습니다 . 이는 유효한 bash 논리이지만 여전히 문제가 있습니다. 실제로 어떻게 작동하는지 이해합니다.Value_2Value_3falsemain_valuemain_valuetruetrue

[ ${Value_1} == "true" ] || [ ${Value_2} == "true" ] || [ ${Value_3} == "true" ]  && main_value=true || main_value=false

답변1

이는 다음과 같이 작성될 수 있고 작성되어야 합니다.

if [[ $value_1 == true || $value_2 == true || $value_3 == true ]]; then
  main_value=true
else
  main_value=false
fi

이상 POSIXly:

if [ "$value_1" = true ] || [ "$value_2" = true ] || [ "$value_3" = true ]; then
  main_value=true
else
  main_value=false
fi

기본적으로 , 또는 가 true인 경우 Value_1true Value_2Value_3설정 main_value됩니다. 그 중 어느 것도 true와 동일하지 않으면 false로 설정됩니다. 이와 같은 조건이 서로 얽혀 있으면 상황이 혼란스러울 수 있습니다.


어떻게 작동하는지 확인할 수 있습니다 set -x.

첫 번째 것이 정확하므로 다음으로 바로 이동합니다 &&.

$ [[ foo == foo ]] || [[ bar == foo ]] || [[ baz == bar ]] && echo yes || echo no
+ [[ foo == foo ]]
+ echo yes
yes

첫 번째는 false이므로 두 번째는 평가되고 두 ​​번째는 true이므로 다음으로 이동합니다 &&.

$ [[ foo == bar ]] || [[ bar == bar ]] || [[ baz == bar ]] && echo yes || echo no
+ [[ foo == bar ]]
+ [[ bar == bar ]]
+ echo yes
yes

첫 번째와 두 번째는 거짓이므로 세 번째를 평가하여 참이므로 다음으로 이동합니다 &&.

$ [[ foo == bar ]] || [[ bar == baz ]] || [[ baz == baz ]] && echo yes || echo no
+ [[ foo == bar ]]
+ [[ bar == baz ]]
+ [[ baz == baz ]]
+ echo yes
yes

세 개 모두 가짜이므로 결승에 진출하세요 ||.

$ [[ foo == bar ]] || [[ bar == baz ]] || [[ baz == foo ]] && echo yes || echo no
+ [[ foo == bar ]]
+ [[ bar == baz ]]
+ [[ baz == foo ]]
+ echo no
no

답변2

(OR ||) 연산자는 왼쪽(LHS)의 표현식을 평가합니다. LHS가 TRUE이면 결과 ||는 TRUE가 되고 오른쪽(RHS)은 평가되지 않습니다. LHS가 FALSE이면 RHS가 계산되어 결과로 사용됩니다 ||. 이것은 종종 "이것을 하되, 그것이 실패하면 저것을 하라"라는 사고 과정에 사용됩니다.
마찬가지로 &&연산자는 LHS가 TRUE("성공하면 이렇게 하세요")일 때만 RHS를 평가합니다.

관련 정보