if [0]返回true.为什么?

gan*_*ars 2 bash shell if-statement

我现在正在学习shell脚本.无论如何,我运行以下程序.

#!/bin/bash
sudo rmmod my_driver
make clean
make
sudo insmod my_driver.ko   // return value is 0
var=$?
if [ $var ];
then
        echo " $var, not done!!"
else
        echo " $var, done!!"
fi
Run Code Online (Sandbox Code Playgroud)

输出是,

...
make[1]: Leaving directory `/usr/src/kernels/2.6.32-431.11.2.el6.x86_64'
0, not done!!
Run Code Online (Sandbox Code Playgroud)

在C语言中(我相信任何语言),如果if条件返回false它将执行else块.

I tried below conditions too, but I faced same problem

if [ "$var" ]
if [ "$var" -eq "0" ]
if [ $var -eq 0 ]
if [ $? ]
Run Code Online (Sandbox Code Playgroud)

为什么它不执行else块?我该怎么执行elseblock if [ 0 ]

dev*_*ull 7

任何字符串传递给test命令,即[成功.所以

if [ 0 ]
Run Code Online (Sandbox Code Playgroud)

相当于

if [ 1 ]
Run Code Online (Sandbox Code Playgroud)

要么

if [ foobar ]
Run Code Online (Sandbox Code Playgroud)

您可以使用算术上下文,并说:

if ((var)); then 
Run Code Online (Sandbox Code Playgroud)

或者,使用以下test命令:

if [ $var -eq 0 ]; then
Run Code Online (Sandbox Code Playgroud)