bash - 如果 [ 0 ] 返回真。为什么?

标签 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

输出是,

...
make[1]: Leaving directory `/usr/src/kernels/2.6.32-431.11.2.el6.x86_64'
0, not done!!

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

I tried below conditions too, but I faced same problem

if [ "$var" ]
if [ "$var" -eq "0" ]
if [ $var -eq 0 ]
if [ $? ]

为什么它不执行 else block ? 如何为 if [ 0 ] 执行 else block ?

最佳答案

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

if [ 0 ]

相当于

if [ 1 ]

if [ foobar ]

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

if ((var)); then 

或者,使用 test 命令作为:

if [ $var -eq 0 ]; then

关于bash - 如果 [ 0 ] 返回真。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23426497/

相关文章:

linux - Bash,如何检查命令输出并继续

linux - 使用shell脚本将json文件转换为csv而不使用jq?

Android shell 获取前台应用包名

shell - 管道命令并使用命令重定向输出

python - 带有名称和输入的 If 语句

linux - 创建目录结构的 Bash 脚本

r - 对多个条件使用 if else 语句

linux - 使用 sed 替换多个单词

Linux bash - 输入格式

Java 执行 ipconfig ,客户端-服务器