나는 bash 테스트 연산자의 이러한 동작을 잘 이해하지 못합니다. 나는 이 줄을 사용하여 vagrant가 설치되어 있는지 확인합니다.
if [ $(vagrant --version > /dev/null) ]; then echo "HELLO"; fi
이제 이것이 false(1)를 반환한다는 것을 알고 있으므로 다음을 입력해야 합니다.
if vagrant --version > /dev/null; then echo "HELLO"; fi
예상된 결과를 얻으려면. 하지만 [ $(vagrant --version > /dev/null) ]가 false(1)를 반환하는 이유를 아직도 이해하지 못합니다. True(0)를 반환하면 안 됩니다.
$(vagrant --version > /dev/null)
표현식인 true를 반환합니다(그렇지 않습니까?).
~에서시험매뉴얼 페이지:
테스트 유틸리티는 표현식을 평가하고 true로 평가되면 종료 상태 0(true)을 반환하고, 그렇지 않으면 1(false)을 반환합니다. 표현식이 없으면 test도 1(false)을 반환합니다.
답변1
다음은 모두 동일합니다.
[ $(vagrant --version > /dev/null) ]
[ ]
test
쉘은 다른 프로그래밍 언어와 다릅니다. 여기에는 반환 값과 표준 출력이라는 2개의 출력이 있습니다. stdout을 에 전달하고 있지만 test
stdout이 리디렉션되었기 때문에 빈 문자열입니다.
당신이 찾고있는 것은입니다.
[ $(vagrant --version > /dev/null; echo $? ) ]
그러나 [ 0 ]
등은 모두 [ 1 ]
true를 반환합니다. 왜냐하면 [ … ]
그 단어가 비어 있지 않은지 테스트하기 위한 단어가 있기 때문입니다. 그래서 당신은 필요
[ $(vagrant --version > /dev/null; echo $? ) = 0 ]
아니면 더 간단하게
vagrant --version > /dev/null