
我已經習慣了其他語言中的這種風格:
do_something || (log_error; return 1) # do something, and if that fails, log the error and then return 1 no matter what, even if the logging fails.
但我似乎在 bash 中找不到等效的東西。問題在於括號的工作方式有點像是具有自己作用域的函數,而 return 1 不會具有預期的行為。
這是我到目前為止所擁有的,但它並不完美:
! do_something && log_error && return 1
問題在於!很混亂,傳回 1 取決於日誌記錄是否成功。
這個更好,但更詳細:
do_something || (log_error; return 1) || return 1
有什麼想法嗎?
答案1
使用大括號。
do_something || { log_error; return 1;}
答案2
最後一次命令運行的退出狀態會保存在$?
變數中。因此,您可以執行以下操作:
do something
if [[ $? > 0 ]]; then
do log_error; exit 1;
fi
為了可讀性,我喜歡這樣。然而,你的非常好,你只需要替換&&
為;
:
! do_something && log_error ; return 1
&&
表示“僅當上一個指令成功退出時才執行下一個指令”,而;
just 表示“執行下一個指令”。