有什么区别:
if IsServerStarted ; then ...
和
if [ IsServerStarted -eq 0 ] ; then ...
我觉得这两个陈述应该是等价的吗?奇怪的是,第二种说法总是如此。
答案 0 :(得分:9)
以下运行名为$PATH
的{{1}}中的shell函数或可执行文件,如果其退出代码为IsServerStarted
(即为true),则运行0
分支。如果不存在此类函数或可执行文件,则退出代码将为非then
(即为false),并且将跳过0
分支。
then
以下if IsServerStarted ; then ...
(又名[
)检查test
是否是等于IsServerStarted
的整数,(0
甚至不包含一位数)总是错误。因此,IsServerStarted
以非[
(即假)代码退出,并始终跳过0
分支。
then
答案 1 :(得分:0)
实际上,第二个会给出一个错误,抱怨“IsServerStarted”不是一个有效的整数。它被认为是一个字符串常量,如
var="IsServerStarted"
if [ IsServerStarted == "$var" ] ; then
会成功(如果不相等则会失败)。
关于您提供的第一个示例中的可执行文件或函数,ndim 是正确的。
需要考虑更多变化:
if $IsServerStarted ; then ...
在那个中,if
是根据变量IsServerStarted
中包含的命令(可执行文件或函数)的返回值来计算的。因此,您可以设置IsServerStarted=true
,然后if
将成功,因为true
是一个始终返回true的shell内置函数。你可以设置IsServerStarted='grep popsicle freezer' and the
,如果`通过或失败,取决于你是否已经没有了。
if [ $IsServerStarted -eq 0 ]; then ...
这只是测试变量是否等于零。如果它不是有效的整数,则会导致错误消息。