如果Bash中的语句创建了奇怪的0文件

时间:2014-11-19 16:15:49

标签: bash if-statement

当我运行以下命令时:

if [ $(vboxmanage list vms | grep -c "all-in-one-1.2.7-wizard") > 0 ]; then
    echo 'yes'
else 
    echo 'no'
fi

在当前目录中创建0文件:

$ ll
...
-rw-rw-r--  1 abc abc     0 Nov 19 17:33 0

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:6)

您没有进行整数比较,而是将命令$()的输出重定向到0,因此创建了一个名为0的文件。

此外,if条件的当前“分辨率”基于条件的执行结果。如果成功,则执行条件。

相反,请使用-gtg reater t han):

if [ $(vboxmanage list vms | grep -c "all-in-one-1.2.7-wizard") -gt 0 ]; then
                                                                 ^^
    echo 'yes'
else
    echo 'no'
fi

您可以通过执行>7或其他任何操作来确保这是行为,并查看创建的文件7(或其他)。

else条件何时执行?如果您无法重定向:

$ [ $(ls /root) > 3 ] && echo "yes" || echo "no"
ls: cannot open directory /root: Permission denied
no

请参阅Numeric comparison以获取所有可能的整数比较列表。