IF语句中函数的返回值显示异常行为

克里斯

谁能解释这是怎么回事?

为什么当我说“ 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

我不能将返回值放在变量中,因为我将进行一些检查。

gniourf_gniourf

在bash中,函数返回0均值,success并且返回非零值均值failure因此,您的testreturnzero成功与testreturnone失败。

这是否有助于了解您if的行为方式?(它应该!)。

最后执行的命令/功能的返回码存储在特殊变量中$?

所以:

testreturnzero 0
ret_testreturnzero=$?
testreturnone 1
ret_testreturnone=$?
echo "$ret_testreturnzero"
echo "$ret_testreturnone"

将输出(最后两行):

0
1

现在,您可能会考虑将它们存储在变量中(如此处所示),并在以后进行逻辑处理。但是有一个陷阱:)因为你没有存储truefalse变量,你储存01(bash中不能存储在一个变量布尔值)。因此,在以后检查成功或失败:

if ((ret_testreturnzero==0)); then
    echo "testreturnzero succeeded"
fi

或者

if ((ret_testreturnzero!=0)); then
    echo "testreturnzero failed"
fi

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在if语句中调用函数并保存返回值

来自分类Dev

在select语句中使用表值函数返回值

来自分类Dev

在select语句中使用表值函数返回值

来自分类Dev

如何直接将bash函数的返回值放入if语句中?

来自分类Dev

从函数返回值和语句

来自分类Dev

If-else语句中的返回值-C ++

来自分类Dev

如何设置列以在select语句中返回值

来自分类Dev

如何在C ++的if语句中检查lambda的返回值?

来自分类Dev

If-else语句中的返回值-C ++

来自分类Dev

SQL Server存储过程在选择语句中返回值

来自分类Dev

选择子句中返回值大于1的语句

来自分类Dev

Java返回值在if语句中不起作用

来自分类Dev

嵌套在循环中的 if 语句中的 OCaml 返回值

来自分类Dev

使用switch语句从函数返回值以调用函数

来自分类Dev

NodeJS中if语句中的异常行为

来自分类Dev

Python异常处理:检查函数的返回值

来自分类Dev

尝试从switch语句-JS-中的函数返回值

来自分类Dev

函数中的变量也不在 else 语句后返回值

来自分类Dev

函数的返回值

来自分类Dev

函数返回值

来自分类Dev

如何在Python的IF语句中从多个返回值中检查变量之一的值

来自分类Dev

在if语句中不能使用getProperty()的返回值,而与String变量相同的值可以工作

来自分类Dev

从when语句中的函数返回

来自分类Dev

抛出异常或返回值

来自分类Dev

如何在基于组合返回值的switch语句中使用&&运算符?

来自分类Dev

在if语句中使用child_process.exec的返回值?

来自分类Dev

如何在if语句中从多个选择返回值到视图?

来自分类Dev

我如何在用python编写的while语句中获取返回值?

来自分类Dev

在SQL中,在where语句中返回值时,“ IS”和“ =”之间是否有区别?

Related 相关文章

热门标签

归档