嵌套函数调用Bash

时间:2013-05-01 20:02:12

标签: bash function

现在,我正在尝试在另一个函数调用中嵌套一个bash函数调用(以便将一个函数的输出用作另一个函数的输入)。是否有可能在bash中嵌套函数调用,正如我在这里尝试的那样?

首先,我定义了这两个函数:

returnSomething()
{
    return 5;
}

funky ()
{
  echo $1;
}

然后,我尝试使用一个函数的输出作为另一个函数的输入。 但是,下一个语句不会打印returnSomething的输出。相反,它根本不打印任何内容。

funky $returnSomething; #Now I'm trying to use the output of returnSomething as the input for funky.

3 个答案:

答案 0 :(得分:10)

你有两个问题。一个是return没有设置函数的输出,而是它的退出状态(成功为零,失败为非零)。例如,echo foo输出 foo(加上换行符),但退出状态0。要控制输出,请使用echoprintf

function returnSomething ()     # should actually be outputSomething
{
    echo 5
}

另一个问题是$returnSomething(或${returnSomething})给出了名为returnSomething的变量的值:

x=5          # sets the variable x
echo "$x"    # outputs 5

要捕获命令的输出,请使用符号$(...)(或`...`,但后者更棘手)。所以:

function funky ()
{
    echo "$( "$1" )"
}
funky returnSomething    # prints 5

或只是:

function funky ()
{
    "$1"          # runs argument as a command
}
funky returnSomething    # prints 5

相反,如果您确实要捕获命令的退出状态,请使用特殊的shell参数?(在命令完成时将其设置为命令的退出状态):

function returnSomething ()
{
    return 5
}
function funky ()
{
    "$1"          # runs argument as a command
    echo "$?"     # prints its exit status
}
funky returnSomething    # prints 5

答案 1 :(得分:3)

Bash用$(command)的输出替换command,因此您可以使用funky $(returnSomething)传递funky returnSomething的输出。但是,看起来你在bash中误解了return;返回值是一个数字,表示呼叫是否成功。在bash中获取最后一个进程的返回状态的方法是$?

returnSomething
funky $?

答案 2 :(得分:0)

这个怎么样:

function foo() { echo one two three; }
function bar() { echo foo #1: $1 }
bar $( foo ) # ==> foo #1: one

上面有问题,感谢Anderson指出。这是一个更新:

function foo() { echo one two three; }
function bar() { echo foo $1; }
bar $( foo )