我试图在bash脚本if语句中使用tput命令,但出于某种原因,它的行为出乎意料。当运行命令,然后只在if语句中检查退出代码时,things正确工作,但是,当直接在if语句中运行该命令时,things不再工作。这里有一个简单的脚本来说明我的问题:
#!/bin/bash
tput setaf 1
if [ $? ]
then
echo "first if works"
fi
if tput setaf 1
then
echo "second if works"
fi运行此脚本只会打印“首先如果有效”。这两种if语句不应该都有效吗,因为它们是等价的?我是不是遗漏了什么?顺便说一句,这是在FreeBSD上运行的,以防这件事发生。
发布于 2018-07-22 02:04:25
这些说法并不等同。
第一个正在检查是否$?是一个非空字符串。;它总是这样,所以第一个if的主体总是运行的。[string]是
如果字符串字符串不是空字符串,则为True;否则为false。
第二个正在检查是否tput setaf 1是否成功,或者说,它的退出状态(因此)$?)是零。第二个if的主体只有在tput命令成功时才会运行。它大致相当于
tput setaf 1
if [ $? -eq 0 ]
...您所描述的结果表明,tput setaf 1存在一些非零代码(例如,1)。"1“是一个非空字符串,但它不是零。tput setaf 1 ; echo $?将向您展示实际代码是什么,然后您可以进一步研究。
https://unix.stackexchange.com/questions/457714
复制相似问题