Bash 논리는 한 시스템에서는 거꾸로 작동하지만 다른 시스템에서는 작동하지 않습니다.

Bash 논리는 한 시스템에서는 거꾸로 작동하지만 다른 시스템에서는 작동하지 않습니다.

두 개의 Linux 시스템이 있습니다. 각 시스템에서 프로그램의 존재를 테스트하고 있습니다. 한 시스템에는 프로그램이 설치되어 있고 다른 시스템에는 설치되어 있지 않습니다. 명령이 $()각 시스템에서 서로 다른 값을 반환하더라도 모든 시스템은 다음 예제를 동일한 방식으로 평가합니다(예상대로 nvim이 설치된 시스템에서는 0이 반환되고 nvim이 없는 시스템에서는 1이 반환됩니다). 예:

if [[ $(type nvim &>/dev/null) ]]; then
    echo true;
else
    echo false;
fi

false두 시스템 모두에 에코가 있습니다.
왜 이런 일이 발생하며 어떻게 해결할 수 있나요?

답변1

노력하다:

if type nvim &>/dev/null
then
     echo true
else
     echo false
fi

명령문은 반환된 종료 코드 if command; then...에 따라 달라집니다 . command[[...]]명령은 문자열 동일성, 파일 존재 등과 같은 다양한 조건에 따라 종료 코드를 설정할 수 있습니다. man bash자세히보다. 여기서는 이러한 조건이 필요하지 않으며 type유용한 종료 코드가 자체적으로 반환됩니다.

답변2

당신이하고있는 일은 잘못되었습니다. 다음과 같은:

if [[ $(type nvim &>/dev/null) ]]; then

다음과 동일:

if [[ "" ]]; then

말씀대로 원하는대로 하시면 됩니다다른 대답으로또는 이유 없이 더 명시적으로 다음을 사용하세요 $?.

type nvim &>/dev/null

if [[ $? -eq 0 ]]; then
    echo true;
else
    echo false;
fi

관련 정보