这个 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

&&是一个逻辑“与”;本质上,它可以让您根据上一个命令是否成功完成来执行某些操作(尽管在更复杂的情况下这可能并非如此,例如,考虑一下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。

相关内容