Shell 如果条件在bash中不起作用

Shell 如果条件在bash中不起作用,shell,Shell,在下面的代码中,它直接进入else条件,而不是if #!/bin/bash var=0 if [ "$var" -eq "0" ] then echo $var else echo $var fi 此代码可以证明其工作原理与给定的一致,没有任何更改 将其放入名为testscript的脚本中,并运行PS4=':$LINENO+'bash-x testscript(要打印源文件中以行号开头调用的每个命令),将获得以下输出: :2+var=0 :3+'[' 0 -eq 0 ']'

在下面的代码中,它直接进入else条件,而不是if

#!/bin/bash
var=0
if [ "$var" -eq "0" ]
   then
   echo $var
else
   echo $var
fi

此代码可以证明其工作原理与给定的一致,没有任何更改

将其放入名为
testscript
的脚本中,并运行
PS4=':$LINENO+'bash-x testscript
(要打印源文件中以行号开头调用的每个命令),将获得以下输出:

:2+var=0
:3+'[' 0 -eq 0 ']'
:5+echo 0
0
现在,让我们对照原始源文件中的行号,查看该跟踪中的行号:

#!/bin/bash                # line 1
var=0                      # line 2 -- :2+var=3
if [ "$var" -eq "0" ]      # line 3 -- :3+'[' 0 -eq 0 ']'
   then                    # line 4
   echo $var               # line 5 -- :5+echo 0
else                       # line 6
   echo $var               # line 7
fi
…事实上,我们按顺序进入第2行、第3行和第5行,这意味着我们实际上采用了真理分支,而不是
else
分支

#!/bin/bash
var=0
if [ "$var" -eq "0" ]
   then
   echo $var
   echo "Hello"
else
   echo $var
   echo "ELSE"
fi
它将打印:0您好

意味着它只在循环时运行。检查一下


你的代码看起来很好。。。除了
if
else
条件具有相同的结果之外。你怎么能分辨出它们之间的区别呢?除了@eigenchris提到的输出问题,你展示的代码工作得很好。