Bash
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
執行此腳本僅列印“第一個如果有效”。由於它們是等效的,因此這兩個 if 語句不應該起作用嗎?我錯過了什麼嗎?順便說一句,這是在 FreeBSD 上執行的,以防萬一。
這些陳述是不等價的。
首先是檢查是否
$?
是非空字元串;它總是會這樣,所以第一個的身體if
總是會跑。是[
string
]
如果字元串字元串不是空字元串,則為真;否則為假。
第二個是檢查是否
tput setaf 1
成功,或者,它的退出狀態(因此$?
)是否為零。第二個的主體if
只會在tput
命令成功時執行。它大致相當於tput setaf 1 if [ $? -eq 0 ] ...
您描述的結果表明
tput setaf 1
正在以一些非零程式碼(例如 1)退出。"1
" 是一個非空字元串,但它不為零。tput setaf 1 ; echo $?
將向您展示實際程式碼是什麼,然後您可以進一步調查。