linux 在一个函数中调用另一个函数

vltsax25  于 2022-11-02  发布在  Linux
关注(0)|答案(3)|浏览(311)

我尝试从一个bash函数中调用另一个bash函数,但它没有按预期工作:


# /bin/bash

function func1(){
    echo "func1 : arg = ${1}"
    return 1
}
function func2(){
    echo "func2 : arg = ${1}"
    local var=func1 "${1}"
    echo "func2 : value = $var"
}
func2 "xyz"

并且电流输出为:

Current output :
func2 : arg = xyz
func2 : value = func1

问:我如何修改上面的程序,以便得到下面的输出?:

Desired output : 
func2 : arg = xyz
func1 : arg = xyz
func2 : value = 1
2mbi3lxu

2mbi3lxu1#

Bash中的函数与其他语言中的函数不同,它们只能返回0到255之间的整数。在函数调用之后,可以使用$?获取该值。如果你想获取其他值,例如字符串,可以在子shell中调用它:

local var=$(func1 "${1}")

将从函数中获取stdout(来自echo语句)并将其导入$var
顺便提一下,函数的语法是:

function func1 { ... }

func1() { ... }
ohtdti5x

ohtdti5x2#

func2定义更改为以下内容:

function func2 () {
    echo "func2 : arg = ${1}"
    func1 "${1}"
    local var=$?
    echo "func2 : value = $var"
}
slmsl1lt

slmsl1lt3#

这条注解可能很有用,因为它与函数中的关键字return不用于返回值,而是用于返回函数的状态(失败或成功)有关:

function fun() {
    return 1
}

if ! fun; then
    echo "Fail"
fi

此外,请记住,默认情况下,任何函数都将返回该函数执行的最后一个命令的退出代码:

function fun() {
   echo "hello, World!"
   cat some_file_that_does_not_exist # exit code 1
}

if ! fun; then
    echo "Fail"
fi

但是对于你的任务,@choroba给了你正确的答案。

相关问题