首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tput命令在if语句中不工作

tput命令在if语句中不工作
EN

Unix & Linux用户
提问于 2018-07-22 01:48:08
回答 1查看 477关注 0票数 1

我试图在bash脚本if语句中使用tput命令,但出于某种原因,它的行为出乎意料。当运行命令,然后只在if语句中检查退出代码时,things正确工作,但是,当直接在if语句中运行该命令时,things不再工作。这里有一个简单的脚本来说明我的问题:

代码语言:javascript
复制
#!/bin/bash

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

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

运行此脚本只会打印“首先如果有效”。这两种if语句不应该都有效吗,因为它们是等价的?我是不是遗漏了什么?顺便说一句,这是在FreeBSD上运行的,以防这件事发生。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-07-22 02:04:25

这些说法并不等同。

第一个正在检查是否$?是一个非空字符串。;它总是这样,所以第一个if的主体总是运行的。[string]

如果字符串字符串不是空字符串,则为True;否则为false。

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

代码语言:javascript
复制
tput setaf 1
if [ $? -eq 0 ]
...

您所描述的结果表明,tput setaf 1存在一些非零代码(例如,1)。"1“是一个非空字符串,但它不是零。tput setaf 1 ; echo $?将向您展示实际代码是什么,然后您可以进一步研究。

票数 8
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/457714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档