Ksh
為什麼“如果 tty -s”有效,但“如果ty_-小號噸噸是−stty -s“ 才不是?
注意,我
ksh
在 CentOS 中使用和執行。我有一個 shell 腳本,其中記錄器功能設置如下:
if tty -s then echo "${FOO}" | tee -a ${BAR_LOG_FILE} else echo "${FOO}" >> ${BAR_LOG_FILE} fi
我的問題是,當我將它重構
if
為看起來像if
我的程式碼中的所有其他測試時,它停止執行。為什麼?
我的重構如下:
if [ tty -s ]; then echo "${FOO}" | tee -a ${BAR_LOG_FILE} else echo "${FOO}" >> ${BAR_LOG_FILE} fi
我唯一的改變是在 the 周圍加上括號
if
並添加一個;
,就像我的其他if
測試一樣,它們都按預期工作。我的重構導致了一個看起來像是
BAR_LOG_FILE
找不到的錯誤。這裡發生了什麼?
後面的方括號
if
不是 shell 語法,可以根據風格偏好省略或不省略,它們是一個單獨的命令,test
. (連結的手冊頁描述了外部test
/[
命令,但許多 shell 提供了自己的實現。)寫作
if [ tty -s ];
相當於寫
if test tty -s;
並且由於
test
/[
沒有tty
運算符,因此它失敗了。
if
後跟一個命令,它執行,該命令的退出程式碼確定在 : 之後採用哪個分支if
:如果為 0,則採用then
分支,否則採用else
分支(如果有)。