2016-07-14 131 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。它允許返回該功能的「退出狀態」($?)。

子進程範圍內的變量不能被父進程訪問。 「

相關問題