Estas declarações não são equivalentes.
O primeiro está verificando se $?
é uma string não vazia ; sempre será, então o corpo do primeiro if
será sempre executado. [
string
]
é
True if the string string is not the null string; otherwise, false.
O segundo está verificando se tput setaf 1
foi bem-sucedido ou, alternativamente, se seu status de saída (e portanto $?
) é zero . O corpo do segundo if
será executado somente quando o comando tput
for bem-sucedido. É amplamente equivalente a
tput setaf 1
if [ $? -eq 0 ]
...
O resultado que você está descrevendo indica que tput setaf 1
está saindo com algum código diferente de zero (por exemplo, 1). " 1
" é uma string não vazia, mas não é zero. tput setaf 1 ; echo $?
mostraria qual é o código atual, que você poderia investigar mais a seguir.