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 입니다.
'programing' 카테고리의 다른 글
운영자처럼요? (0) | 2023.04.25 |
---|---|
unix/linux 쉘에서 패턴을 일치시킬 때 어떻게 역 또는 음의 와일드카드를 사용할 수 있습니까? (0) | 2023.04.25 |
Excel 한 열의 값이 다른 열의 값 범위에 있습니다. (0) | 2023.04.25 |
WPF DataGrid 유효성 검사 오류가 지워지지 않습니다. (0) | 2023.04.25 |
git reset --hard HEAD는 추적되지 않은 파일을 남깁니다. (0) | 2023.04.25 |