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 1
0이 아닌 코드(예: 1)로 종료됨을 나타냅니다. " 1
"는 비어 있지 않은 문자열이지만 0은 아닙니다. tput setaf 1 ; echo $?
실제 코드가 무엇인지 알려주고 추가 조사를 할 수 있습니다.