当我运行以下命令时:
if [ $(vboxmanage list vms | grep -c "all-in-one-1.2.7-wizard") > 0 ]; then
echo 'yes'
else
echo 'no'
fi
Run Code Online (Sandbox Code Playgroud)
0
在当前目录中创建一个文件:
$ ll
...
-rw-rw-r-- 1 abc abc 0 Nov 19 17:33 0
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
您没有进行整数比较,而是将命令的输出重定向$()
到0
,因此0
创建了一个带有名称的文件.
此外,if条件的当前"分辨率"基于条件的执行结果.如果成功,则执行条件.
相反,使用-gt
(g
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
Run Code Online (Sandbox Code Playgroud)
您可以通过执行>7
或任何操作确保这是行为,并查看创建的文件7
(或其他).
该else
条件何时执行?如果您无法重定向:
$ [ $(ls /root) > 3 ] && echo "yes" || echo "no"
ls: cannot open directory /root: Permission denied
no
Run Code Online (Sandbox Code Playgroud)
有关所有可能的整数比较的列表,请参见数字比较.