谁能解释这是怎么回事?
为什么当我说“ Return 0”(反之亦然)时,“ IF”语句认为返回值为“ 1”(而不是Null)。
我在编写另一个脚本时发现了这一点,因此我开发了这个小脚本来对其进行测试:
#!/bin/bash
function testreturnzero()
{
echo $1
return 0
}
function testreturnone()
{
echo $1
return 1
}
if (testreturnzero 1) || (testreturnzero 2)
then
echo "zero returned '1'"
fi
if (testreturnone 1) || (testreturnone 2)
then
echo "one returned '1'"
fi
引用“返回0”的IF认为其为真(并且不处理第二个函数),引用“返回1”的IF认为其为假。难道不是正好相反吗?
1
zero returned '1'
1
2
我不能将返回值放在变量中,因为我将进行一些检查。
在bash中,函数返回0
均值,success
并且返回非零值均值failure
。因此,您的testreturnzero
成功与testreturnone
失败。
这是否有助于了解您if
的行为方式?(它应该!)。
最后执行的命令/功能的返回码存储在特殊变量中$?
。
所以:
testreturnzero 0
ret_testreturnzero=$?
testreturnone 1
ret_testreturnone=$?
echo "$ret_testreturnzero"
echo "$ret_testreturnone"
将输出(最后两行):
0
1
现在,您可能会考虑将它们存储在变量中(如此处所示),并在以后进行逻辑处理。但是有一个陷阱:)
。因为你没有存储true
和false
变量,你储存0
和1
(bash中不能存储在一个变量布尔值)。因此,在以后检查成功或失败:
if ((ret_testreturnzero==0)); then
echo "testreturnzero succeeded"
fi
或者
if ((ret_testreturnzero!=0)); then
echo "testreturnzero failed"
fi
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句