배쉬 인 경우 [false]; true를 반환
이번 주 배쉬를 배우고 걸림돌에 부딪쳤다.
#!/bin/sh
if [ false ]; then
echo "True"
else
echo "False"
fi
조건이 다르게 표시 되더라도 항상 True를 출력합니다. 괄호 []를 제거하면 작동하지만 그 이유를 이해할 수 없습니다.
당신은 실행 [(일명 test명령을 실행하지, 인수 "거짓"으로) 명령을 false. "false"는 비어 있지 않은 문자열이므로 test항상 명령이 성공합니다. 실제로 명령을 실행하려면 명령을 삭제하십시오 [.
if false; then
echo "True"
else
echo "False"
fi
Bash에 대한 빠른 부울 입문서
if문은 인수로 명령을한다 (처럼 &&, ||등). 명령의 정수 결과 코드는 부울 (0 / null = true, 1 / else = false)로 해석됩니다.
test문은 인수로 연산자와 피연산자를 사용 하고 같은 형식의 결과 코드를 반환합니다 if. test명령문 의 별명은 보다 복잡한 비교를 수행 [하는 데 자주 사용됩니다 if.
true및 false문은 아무것도하지 않고 그 결과 코드를 반환 (0과 1, 각각). 따라서 Bash에서 부울 리터럴로 사용할 수 있습니다. 그러나 문장을 문자열로 해석되는 곳에 넣으면 문제가 발생합니다. 귀하의 경우 :
if [ foo ]; then ... # "if the string 'foo' is non-empty, return true"
if foo; then ... # "if the command foo succeeds, return true"
그래서:
if [ true ] ; then echo "This text will always appear." ; fi;
if [ false ] ; then echo "This text will always appear." ; fi;
if true ; then echo "This text will always appear." ; fi;
if false ; then echo "This text will never appear." ; fi;
이것은 echo '$foo'vs 와 같은 일을하는 것과 비슷합니다 echo "$foo".
test명령문을 사용할 때 결과는 사용 된 연산자에 따라 다릅니다.
if [ "$foo" = "$bar" ] # true if the string values of $foo and $bar are equal
if [ "$foo" -eq "$bar" ] # true if the integer values of $foo and $bar are equal
if [ -f "$foo" ] # true if $foo is a file that exists (by path)
if [ "$foo" ] # true if $foo evaluates to a non-empty string
if foo # true if foo, as a command/subroutine,
# evaluates to true/success (returns 0 or null)
즉 , 당신은 그냥 패스로 테스트 뭔가 원하는 경우 / (일명 / "true"를 "거짓") 실패, 다음에 명령을 전달 if하거나 &&괄호없이 등 문. 복잡한 비교를 위해서는 적절한 연산자와 함께 대괄호를 사용하십시오.
그리고 그래, 내가 거기 배쉬의 기본 부울 형식 같은 건 없다, 그리고 알고 있어요 if및 [및 true기술적으로 "명령"이 아니라 "문"이다; 이것은 매우 기본적인 기능 설명입니다.
나는 다음과 같은 것을 실행하여 기본적인 논리를 할 수 있음을 발견했다.
A=true
B=true
if ($A && $B); then
C=true
else
C=false
fi
echo $C
true / false를 사용하면 일부 브라켓 클러 터가 제거됩니다 ...
#! /bin/bash
# true_or_false.bash
[ "$(basename $0)" == "bash" ] && sourced=true || sourced=false
$sourced && echo "SOURCED"
$sourced || echo "CALLED"
# Just an alternate way:
! $sourced && echo "CALLED " || echo "SOURCED"
$sourced && return || exit
참고 URL : https://stackoverflow.com/questions/19670061/bash-if-false-returns-true
'Programming' 카테고리의 다른 글
| Clang은 왜 x * 1.0을 최적화하지만 x + 0.0은 최적화하지 않습니까? (0) | 2020.07.07 |
|---|---|
| 연속과 콜백의 차이점은 무엇입니까? (0) | 2020.07.07 |
| rsync : 서버에서 대상 디렉토리를 만들도록 어떻게 구성 할 수 있습니까? (0) | 2020.07.07 |
| virtualenv-사이트 패키지 없음 및 pip가 여전히 글로벌 패키지를 찾고 있습니까? (0) | 2020.07.07 |
| Math.random () 대 Random.nextInt (int) (0) | 2020.07.07 |