如何在bash脚本中的while测试中使用函数返回值

Yulong Ao

这是我的代码摘要。我使用return_valinfunc之间的比较结果"true"来确定while终止条件。但是回声根本不起作用。

#!/bin/bash

func(){
    a=$1
    b=$2
    echo $a
    echo $b
    if ((a > b)) 
    then 
        return_val="true"
    else
        return_val="false"
    fi  
}

c=1
d=4
while [[ $(func $c $d) && ("$return_val"!="true") ]]
do
    ((c++))
done
mklement0

由于要查看echo命令的输出,因此需要将stdout输出返回(退出)代码分开

#!/bin/bash

func(){
    local a=$1 b=$2
    echo "$a"  # stdout output
    echo "$b"
    if (( a > b ))  # see below for how this could be simplified.
    then 
        return 0 # set exit code
    else
        return 1
    fi  
}

c=1 d=4
while ! func $c $d
do
    ((c++))
done

这样,您就可以直接使用该函数(前缀!为否定测试的结果),而无需使用命令替换,而让其返回(退出)代码驱动while循环条件的结果0表示成功的退出代码,任何其他含义失败)。

通过仅! func $c $d作为条件使用,func的stdout输出仅按原样打印。


附录Billy Wayne McCann的答案指出,并不需要严格使用显式return语句来设置退出代码(但不需要使用test[1])。

(( a > b ))可用于通过自身的功能作为最后的语句,设置退出代码暗示

如果没有显式return语句,则它是函数的最后一个命令,用于设置其退出代码(类似的情况适用于没有语句的脚本exit)。

(( ... ))将退出代码设置为1,如果...计算,则设置01否则设置(任何非负结果)。如果表达式为true,则布尔表达式(如)将a > b导致10否则为。因此,(( a > b ))单独地隐式地做与上述if声明明确地做的相同的事情

func(){
    local a=$1 b=$2
    echo "$a"  # stdout output
    echo "$b"
    (( a > b ))  # exit code implicitly set to 0, if test *succeeds*, 1 otherwise
}

[1]使用test或是[ ... ]符合POSIX的方法来评估条件。除非您的代码必须符合POSIX,否则Bash[[ ... ]](( ... ))(对于布尔运算)是更好的选择-请参阅https://stackoverflow.com/a/29320710/45375

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在函数中使用存储过程返回值?

如何在C ++中使用Future和Promise从函数线程中获取返回值

如何在黄瓜测试中测试诺言的返回值?

如何在玩笑中测试模拟函数的返回值

在bash中使用AND链接多个函数的返回值

如何在完全不同的函数中使用函数的返回值

pytest->如何在类下的测试方法中使用夹具返回值

如何在将数组作为参数传递并让函数返回值时在 bash 中调用函数?

如何使用Bash命令的返回值(例如“ ifconfig”)用作Bash脚本中if语句的参数

为什么我只能通过在测试脚本中使用夹具(来自 pytest)来获取函数作为返回值?

如何从BASH中的节点脚本访问返回值?

使用go中的通道返回值测试Emitter函数

使用宏测试C中的函数返回值

如何在Node.js中使用Promise函数的返回值

如何在vscode中使用jsdoc在包装函数中正确获取返回值的推断类型?

如何在python中使用户可以输入的函数的返回值

如何在 app.locals 函数中使用带有 express 的节点返回值

如何在模拟的Jest函数中使用var作为返回值?

如何在python中使用函数(带返回值)更新列表

如何在Javascript的另一个函数中使用返回值?

如何在打字稿中使用通用返回值注释函数

如何在C ++中使用函数的参数作为指针从DLL返回值?

如何在测试中检查返回值的类型

如何在Powershell脚本中捕获返回值

bash脚本中的返回值错误

在 c 中,返回值如何在 if 语句中添加返回值的函数中工作?

如何在Google脚本中获取和使用返回值

如何在完成处理程序中使用返回值?

如何在Angular JS中使用$ q返回值?