Como esse teste de statemnet bash “. $ TOMCAT_USER” =. && TOMCAT_USER = trabalho do tomcat?

0

Estou tentando entender o script tomemon daemon.sh que contém várias linhas ao longo das linhas test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat

Eu descobri que test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat verifica se uma variável de ambiente TOMCAT_USER já está definida se assim for, e se não usa o valor padrão do tomcat

O que eu entendo é como a declaração é avaliada pelo bash.

    
por ams 24.08.2013 / 06:11

1 resposta

1

&& é um "e" lógico; essencialmente, ele permite fazer algo com base no fato do comando anterior ter sido concluído com êxito (embora isso possa não ser verdade em casos mais complexos, por exemplo, considere true || false && echo true , aqui está um artigo sobre regras de lógica booleana . Outra maneira de escrever a declaração em sua pergunta seria:

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

Esta é uma maneira estranha de testar uma variável não definida / nula, no entanto. O POSIX já tem várias maneiras de fazer isso:

: "${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

A diferença entre as versões := / :- e : -less é que as versões : também testam se a variável é nula, além de testar se não está definida (o que está mais próximo do original teste).

    
por 24.08.2013 / 07:19