bash - one - ubuntu shell script if condition




Bash:使用'true` (3)

在我從一名前員工繼承的許多腳本中,我一直看到這種模式:

if (true $SOME_VAR)&>/dev/null; then
    ...
fi

或者這個

(true $SOME_VAR)&>/dev/null || SOME_VAR="..."

true的手冊頁說它總是返回true,因此我一直在想,這些檢查有什麼意義? 在第一種情況下,始終執行then部分,在第二種情況下,從不執行右手部分。


以下可能是等效的,更直接的:

if [ "${SOME_VAR+x}" ] then
    ...
fi

或者,在作業案例中:

[ "${SOME_VAR+x}" ] || SOME_VAR="..."

如果未設置變量, +擴展運算符將擴展為空字符串;如果已分配變量,則擴展為x (指定空字符串仍表示已分配)。 在這種情況下,您可以根據需要替換x (除了空字符串)。

還有${SOME_VAR:+x}變體。 區別在於空字符串::如果為變量分配空字符串,則+擴展為空字符串(如果分配了值,則+擴展為x ,即使它是空字符串)。


如果set -u (aka set -o nounset )生效,則在true $SOME_VAR $SOME_VAR時, true $SOME_VAR將失敗。 因此,這是一種測試變量是否已定義的方法。


雖然不完全一樣,

if [ x"$SOME_VAR" = x ]; then
    ...
fi

傾向於做你想做的事; 如果$SOME_VAR未定義或(差別:)定義為零長度字符串,則if為true。

如果SOME_VAR設置SOME_VAR並且設置了-u則此代碼不起作用。 我相信以下基礎知識有效: "${SOME_VAR-}" = ""





conditional