2016-07-14 100 views
0
function to_call() 
{ 
    echo "#1 is $1" 
} 

function call() 
{ 
    local val=$(to_call testInput) 
} 

终端上没有输出。为什么?将函数的输出分配给bash shell中的变量

,如果我将其更改为:

function to_call() 
{ 
    echo "#1 is $1" 
    return 1 
} 

function call() 
{ 
    local val=$(to_call testInput) 
    echo "value is $val" 
} 

而不是 “值1”,它是 “值#1 testInput”。怎么了?

有没有什么办法可以在终端上打印“to_call函数”的回声,还可以使用返回状态?

+0

>”尽管bash有一个return语句,但您可以用它指定的唯一东西就是函数的状态,它是一个数字值,如在退出语句中指定的值“ [source](http:// www。 linuxjournal.com/content/return-values-bash-functions) – pce

回答

1

Theres没有输出,因为command substitution(它调用subshell)并重新分配输出,即。函数输出到stdout被重新分配给本地变量。

bash return声明是仅指定一个状态, 像exit而不终止shell。它允许返回该功能的“退出状态”($?)。

子进程范围内的变量不能被父进程访问。 “

相关问题