Bash

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

  • July 22, 2018

我正在嘗試在 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

執行此腳本僅列印“第一個如果有效”。由於它們是等效的,因此這兩個 if 語句不應該起作用嗎?我錯過了什麼嗎?順便說一句,這是在 FreeBSD 上執行的,以防萬一。

這些陳述是不等價的。

首先是檢查是否$?是非空字元串;它總是會這樣,所以第一個的身體if總是會跑。是[string]

如果字元串字元串不是空字元串,則為真;否則為假。

第二個是檢查是否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