有什么区别:
if IsServerStarted ; then ...
和
if [ IsServerStarted -eq 0 ] ; then ...
在我看来,这两个陈述应该是等价的?奇怪的是,第二个陈述总是正确的。
有什么区别:
if IsServerStarted ; then ...
和
if [ IsServerStarted -eq 0 ] ; then ...
在我看来,这两个陈述应该是等价的?奇怪的是,第二个陈述总是正确的。
下面在$PATH
named中运行 shell 函数或可执行文件IsServerStarted
,如果其退出代码为0
(即 true),则运行then
分支。如果这样的函数或可执行文件不存在,则退出代码将为非0
(即假)并且then
将跳过分支。
if IsServerStarted ; then ...
下面有[
(又名test
)检查是否IsServerStarted
是一个整数等于0
,其中(IsServerStarted
甚至不包含单个数字)总是false。因此,[
以非0
(即假)代码退出并且then
总是跳过分支。
if [ IsServerStarted -eq 0 ] ; then ...
实际上,第二个会给出一个错误,抱怨“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` 会通过或失败。
if [ $IsServerStarted -eq 0 ]; then ...
这只是测试变量是否等于零。如果它不是一个有效的整数,它将导致错误消息。