7

现在,我正在尝试将一个 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.
4

3 回答 3

10

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

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

另一个问题是$returnSomething(or ${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
于 2013-05-01T20:16:05.360 回答
3

Bash 替换$(command)为 的输出command,因此您可以使用funky $(returnSomething)来传递funky的输出returnSomething。但是,您似乎对returnbash 有误解;返回值是一个数字,表示调用是否成功。在bash中获取最后一个进程的返回状态的方法是$?

returnSomething
funky $?
于 2013-05-01T20:14:49.980 回答
0

这个怎么样:

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

以上有问题,感谢安德森指出。这是一个更新:

function foo() { echo one two three; }
function bar() { echo foo $1; }
bar $( foo )
于 2013-05-01T20:13:21.007 回答