tput 命令在 if 语句中不起作用

tput 命令在 if 语句中不起作用

我试图在 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]

如果字符串为真细绳不是空字符串;否则为假。

第二正在检查是否tput setaf 1成功,或者检查其退出状态(因此$?)是否为零。仅当命令成功时,第二个函数的主体if才会运行。tput它大致相当于

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

您描述的结果表明tput setaf 1正在退出并带有一些非零代码(例如 1)。 " 1" 是一个非空字符串,但它不为零。tput setaf 1 ; echo $?会告诉你实际的代码是什么,然后你可以进一步调查。

相关内容