私はbashに精通していませんが、次の内容が何を意味し、説明が何であるかを理解する必要がありますか?
コードは私のものではありませんが、ソースを信じています。特に節の表現のため悩みになりますif
。 2回するとどんな利点がありますかDISABLE_CUSTOM_CREDS
?
if [[ -z "${ENABLE_CREDS}" && "${DISABLE_CUSTOM_CREDS}" && "${DISABLE_CUSTOM_CREDS}" -eq 0 ]]; then
ENABLE_CREDS=1
elif [[ -z "${ENABLE_CREDS}" && "${DISABLE_CUSTOM_CREDS}" -eq 1 ]]; then
ENABLE_CREDS=0
fi
export ENABLE_CREDS
よろしくお願いします!
答え1
- 文if
実行テストには、DISABLE_CUSTOM_CREDS
シェル変数を2回テストする操作が含まれます。変数が最初に使用されたときに変数値がnullでないことをテストします。そうであれば、NULL以外の値が数値的に0に等しいかどうかをテストします。
コードを書くもう1つの方法は次のとおりです。
if [[ -z "${ENABLE_CREDS}" && -n "${DISABLE_CUSTOM_CREDS}" && "${DISABLE_CUSTOM_CREDS}" -eq 0 ]]; then
ENABLE_CREDS=1
elif [[ -z "${ENABLE_CREDS}" && "${DISABLE_CUSTOM_CREDS}" -eq 1 ]]; then
ENABLE_CREDS=0
fi
export ENABLE_CREDS
-n
空でない文字列をテストする挿入されたテスト演算子を確認してください。この演算子は、文字列のみをテストする場合は暗黙的に適用されます。
DISABLE_CUSTOM_CREDS
null以外の値の初期テストが必要かどうかはわかりません(残りのコードは表示されません)。これは、変数がnullの可能性がある場合に必要になる可能性があります。この場合、ゼロテストは次のようになります。本物(プログラマはおそらく設定を実行したくありませんENABLE_CREDS
)1
。
これは意味する
- に
ENABLE_CREDS
設定するには、設定解除または空の文字列でなければならず、nullではなく、0に等しくなければなりません。1
ENABLE_CREDS
DISABLE_CUSTOM_CREDS
- に
ENABLE_CREDS
設定するには、未設定または空でなければならず、数字は1に等しくなければなりません。0
ENABLE_CREDS
DISABLE_CUSTOM_CREDS
if
このコードの詳細を知らないと、変数の論理逆数によって、ステートメント全体が一部の値ENABLE_CREDS
に設定される0
か、まだ設定されていないと推測される危険性があります。1
DISABLE_CUSTOM_CREDS
if [ -z "$ENABLE_CREDS" ]; then
if [ "${DISABLE_CUSTOM_CREDS:-0}" = 1 ]; then
ENABLE_CREDS=0
else
ENABLE_CREDS=1
fi
fi
空の場合はENABLE_CREDS
テストし(変数が設定されていないか空の場合はDISABLE_CUSTOM_CREDS
文字列)、対応するテスト結果に設定するか、そのテスト結果に基づいて設定します。0
1
ENABLE_CREDS
0
1
ここでの違いは、このコードは常にENABLE_CRED
離れているということです。一部値。 null以外の古い値を持つか、値を持つことが保証され0
ます1
。
DISABLE_CUSTOM_CREDS
これは、変数が空の場合2
(または実際には0または1以外の値を持つ他の変数の名前である場合は算術である場合)、変数の値を保持できる質問のコードとは対照的です。 nullの操作は面倒です。これが上記のコードで文字列比較を選択した理由の1つです。