我试图理解 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。