이 bash 스니펫의 기능은 무엇인가요?

이 bash 스니펫의 기능은 무엇인가요?

저는 bash에 능숙하지 않지만 다음 내용이 무엇을 의미하고 설명이 무엇인지 이해해야 합니까?

코드는 내 것이 아니지만 소스를 믿습니다. 특히 절의 표현 때문에 고민이 됩니다 if. 두 번 하면 어떤 이점이 있나요 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쉘 변수를 두 번 테스트하는 작업이 포함됩니다. 변수가 처음 사용될 때 변수 값이 null이 아닌지 테스트합니다. 그렇다면 Null이 아닌 값이 수치적으로 0과 같은지 여부를 테스트합니다.

코드를 작성하는 또 다른 방법은 다음과 같습니다.

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_CREDS) 1.

이것은 의미한다

  • 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에 대한 작업은 까다롭습니다. 이는 위 코드에서 문자열 비교를 선택한 이유 중 하나입니다.

관련 정보