if 문에서 tput 명령이 작동하지 않습니다.

if 문에서 tput 명령이 작동하지 않습니다.

bash 스크립트 if 문에서 tput 명령을 사용하려고 하는데 어떤 이유로 이상하게 동작합니다. 명령을 실행한 다음 if 문에서 종료 코드를 확인하면 모든 것이 잘 작동하지만 if 문에서 직접 명령을 실행하면 모든 것이 더 이상 작동하지 않습니다. 내 문제를 설명하는 간단한 스크립트는 다음과 같습니다.

#!/bin/bash

tput setaf 1
if [ $? ]
then
  echo "first if works"
fi

if tput setaf 1
then
  echo "second if works"
fi

이 스크립트를 실행하면 "first if Works"만 인쇄됩니다. 이 두 if 문은 동일하므로 작동하면 안 되나요? 내가 뭐 놓친 거 없니? 그런데, 중요한 경우 FreeBSD에서 실행되고 있습니다.

답변1

이 진술은 동일하지 않습니다.

첫 번째$?비어 있지 않은 문자열 확인 중;항상 그러할 것이므로 첫 번째의 몸은 if영원히 달릴 것입니다.[string]

문자열이 참인 경우빈 문자열이 아닙니다. 그렇지 않으면 false입니다.

두번째tput setaf 1성공했는지 또는 종료 상태가 (따라서 $?) 0 인지 확인 중입니다 .. 두 번째 함수의 본문은 명령이 성공한 경우 if에만 실행됩니다 . tput대략 다음과 같습니다.

tput setaf 1
if [ $? -eq 0 ]
...

설명하신 결과는 tput setaf 10이 아닌 코드(예: 1)로 종료됨을 나타냅니다. " 1"는 비어 있지 않은 문자열이지만 0은 아닙니다. tput setaf 1 ; echo $?실제 코드가 무엇인지 알려주고 추가 조사를 할 수 있습니다.

관련 정보