现在,我正在尝试在另一个函数调用中嵌套一个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.
答案 0 :(得分:10)
你有两个问题。一个是return
没有设置函数的输出,而是它的退出状态(成功为零,失败为非零)。例如,echo foo
将输出 foo
(加上换行符),但退出状态为0
。要控制输出,请使用echo
或printf
:
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 )