나는 다음 줄을 따라 여러 줄을 포함하는 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인지 여부도 테스트한다는 것입니다.