このbashスニペットの機能は何ですか?

このbashスニペットの機能は何ですか?

私は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_CREDSnull以外の値の初期テストが必要かどうかはわかりません(残りのコードは表示されません)。これは、変数がnullの可能性がある場合に必要になる可能性があります。この場合、ゼロテストは次のようになります。本物(プログラマはおそらく設定を実行したくありませんENABLE_CREDS1

これは意味する

  • ENABLE_CREDS設定するには、設定解除または空の文字列でなければならず、nullではなく、0に等しくなければなりません。1ENABLE_CREDSDISABLE_CUSTOM_CREDS
  • ENABLE_CREDS設定するには、未設定または空でなければならず、数字は1に等しくなければなりません。0ENABLE_CREDSDISABLE_CUSTOM_CREDS

ifこのコードの詳細を知らないと、変数の論理逆数によって、ステートメント全体が一部の値ENABLE_CREDSに設定される0か、まだ設定されていないと推測される危険性があります。1DISABLE_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文字列)、対応するテスト結果に設定するか、そのテスト結果に基づいて設定します。01ENABLE_CREDS01

ここでの違いは、このコードは常にENABLE_CRED離れているということです。一部値。 null以外の古い値を持つか、値を持つことが保証され0ます1

DISABLE_CUSTOM_CREDSこれは、変数が空の場合2(または実際には0または1以外の値を持つ他の変数の名前である場合は算術である場合)、変数の値を保持できる質問のコードとは対照的です。 nullの操作は面倒です。これが上記のコードで文字列比較を選択した理由の1つです。

関連情報