Linux
|| 之後的聯合命令(OR) 運算符
當我按照下面的方式編寫程式碼時,我可以在
else
語句之後執行幾個命令:if [ "$?" -eq 0 ] then echo "OK" else echo "NOK" exit 1 fi
但是,當我使用另一種語法時,我無法在OR之後合併 2 個命令:
[ "$?" -eq 0 ] && echo "OK" || (echo "NOK" >&2 ; exit 1)
在我的案例中,我有一個基於 的複雜腳本
"$?" == 0
,因此我正在尋找一種方法在它不正確時中止(除了回顯消息)。
這對
(
)
產生了一個子shell,破壞了使用exit命令退出整個腳本的目標。只需替換
(
)
with{
}
(和調整後的語法,因為{
}
不是自動分隔符,而是更像命令:{
內部的最後一個命令後面的空格必須以某個終止符結尾:;
適合):這將在同一個 shell 中執行命令鏈,從而退出會影響這個shell。[ "$?" -eq 0 ] && echo "OK" || { echo "NOK" >&2; exit 1;}
更新:@D.BenKnoble 評論說應該
echo
失敗,行為不會像以前的if ...; then ... else ... fi
構造。所以第一個echo
的退出程式碼必須用 noop:
命令“轉義”(內置不能失敗)。[ "$?" -eq 0 ] && { echo "OK"; :;} || { echo "NOK" >&2; exit 1;}
參考:
分組命令
命令分組的格式如下:
(compound-list) Execute compound-list in a subshell environment; see Shell Execution Environment. Variable assignments and built-in commands that affect the environment shall not remain in effect after the list finishes.
$$ … $$
{ compound-list;} Execute compound-list in the current process environment. The semicolon shown here is an example of a control operator delimiting the } reserved word. Other delimiters are possible, as shown in Shell Grammar; a <newline> is frequently used.