programing

bash의 if 블록에서 부울 변수를 평가하는 방법은 무엇입니까?

showcode 2023. 4. 25. 23:46
반응형

bash의 if 블록에서 부울 변수를 평가하는 방법은 무엇입니까?

다음 변수를 정의했습니다.

myVar=true

이제 이것과 같은 것을 실행해 보겠습니다.

if [ myVar ]
then
    echo "true"
else
    echo "false"
fi

위의 코드가 작동하지만, 설정하려고 하면 다음과 같습니다.

myVar=false

여전히 참으로 출력됩니다.뭐가 문제일까요?

edit: 폼에서 어떤 작업을 수행할 수 있습니다.

if [ "$myVar" = "true" ]; then ...

좀 어색해요.

감사해요.

bash는 부울 변수와 부울 변수를 모릅니다.test(사용할 때 호출됩니다.)[).

해결책은 다음과 같습니다.

if $myVar ; then ... ; fi

왜냐면true그리고.false를 반환하는 명령입니다.0아니면요?1각각 어떤 것이 그것입니까?if기대하고 있습니다.

값은 "스왑"됩니다.다음 명령입니다.if돌아와야 합니다0성공했을 때요0대부분의 프로그래밍 언어로 "거짓"을 의미합니다.

보안 경고: BASH가 변수를 확장한 다음 결과를 명령으로 실행하려고 하기 때문에 이 방법이 작동합니다.변수에 다음과 같은 악성 코드가 포함되어 있지 않아야 합니다.rm -rf /

참고:if $myVar; then ... ;fi구성에 방지하려는 보안 문제가 있습니다.

case $myvar in
  (true)    echo "is true";;
  (false)   echo "is false";;
  (rm -rf*) echo "I just dodged a bullet";;
esac

그리고 왜 그런지 다시 생각해보시는 게 좋을 겁니다if [ "$myvar" = "true" ]어색해 보이시군요종료 상태를 얻기 위해 프로세스를 포킹하는 것을 능가하는 셸 문자열 비교입니다.포크는 무겁고 비싼 작업인 반면, 문자열 비교는 매우 저렴합니다.수천 개의 CPU 사이클이 아닌 몇 개의 CPU 사이클을 생각해 보십시오.나의case용액도 포크 없이 처리됩니다.

언급URL : https://stackoverflow.com/questions/3810709/how-to-evaluate-a-boolean-variable-in-an-if-block-in-bash 입니다.

반응형