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