두 개의 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