2012-03-14 25 views
2

鑑於以下兩個可執行腳本:如何從bash shell腳本子例程返回數據?

----- file1.sh 

#!/bin/sh 
. file2.sh 
some_routine data 

----- file2.sh 

#!/bin/sh 
some_routine() 
{ 
    #get the data passed in 
    localVar=$1 
} 

我可以通過「數據」到另一種語言的子程序,但我也想返回數據。

是否可以從some_routine返回信息?

e.g: var = some_routine data 
+0

只是fyi,你不能在任務中有一個空間:'var = $(some_routine data) – Kevin 2012-03-14 23:12:43

回答

8

有子程序輸出的東西,然後用$()捕獲輸出:

some_routine() { 
    echo "foo $1" 
} 

some_var=$(some_routine bar) 
+0

非常優雅的解決方案:) – kappa 2012-03-14 23:02:44

+1

這個和其他解決方案在http://www.linuxjournal.com/content/return-values-bash-functions – jofel 2012-03-14 23:50:23

+0

感謝您的回覆。 Amber提供的選項有效,但不適用於我的情況。我的例程回顯各種狀態消息,並可以返回早期響應。我嘗試了jofel提供的鏈接下的第二個選項,它完全適合我。 jofel,你能回答我的問題和答案嗎?我會將其標記爲解決方案。 – TERACytE 2012-03-15 14:45:43

0

這是不允許的,只是設置一個全局變量的值(..所有的變量都在全球慶典)

0

如果

some_routine() { 
    echo "first" 
    echo "foo $1" 
} 

some_var=$(some_routine "second") 
echo "result: $some_var" 

他們ok.But結果似乎decid由第一個「回聲」編輯。另一種方式是使用「eval」。 some_var回報「第一」

some_routine() 
{ 
     echo "cmj" 
     eval $2=$1 
} 

some_routine "second" some_var 
echo "result: $some_var" 
這樣

,some_var回報「第二」 .The慶典不返回一個字符串directly.So我們需要一些技巧。