이 bash 문은 ".$TOMCAT_USER" = && TOMCAT_USER=tomcat을 어떻게 테스트합니까?

이 bash 문은 ".$TOMCAT_USER" = && TOMCAT_USER=tomcat을 어떻게 테스트합니까?

나는 다음 줄을 따라 여러 줄을 포함하는 tomcat daemon.sh 스크립트를 이해하려고 노력하고 있습니다.test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat

test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat환경 변수 TOMCAT_USER가 정의되어 있는지 확인하고, 그렇다면 그것을 사용하고, 그렇지 않다면 Tomcat의 기본값을 사용하는 것을 발견했습니다.

내가 이해하는 것은 bash가 이 명령문을 평가하는 방법입니다.

답변1

&&기본적으로 논리적 AND입니다. 이전 명령이 성공적으로 완료되었는지 여부에 따라 작업을 수행할 수 있습니다(더 복잡한 경우에는 그렇지 않을 수도 있음) true || false && echo true.부울 논리 규칙에 관한 기사). 질문에 진술을 작성하는 또 다른 방법은 다음과 같습니다.

if test ".$TOMCAT_USER" = .; then
    TOMCAT_USER=tomcat
fi

그럼에도 불구하고 이는 설정되지 않은/비어 있는 변수를 테스트하는 이상한 방법입니다. POSIX에는 이미 이를 수행하는 여러 가지 방법이 있습니다.

: "${TOMCAT_USER:=tomcat}"  # Assign as part of the expansion,
                            # `:' is a noop to avoid running the expansion.
TOMCAT_USER="${TOMCAT_USER:-tomcat}"  # Expand, and then assign

:=/ 와 -less 버전 :-의 차이점 ::변수가 설정되지 않았는지 테스트하는 것(원래 테스트에 더 가깝습니다) 외에도 변수가 null인지 여부도 테스트한다는 것입니다.

관련 정보