2017-05-04 79 views
2

我想將一個參數傳遞給一個函數,並從中返回一個計算出的值以供進一步處理。以下是示例代碼。從shell腳本中的函數返回值

#!/bin/bash 

test() 
{ 
    echo $1 

    c=$(expr $1 + "10000") 

    return $c 
} 

var=$(test 10) 

echo $var 

我想獲取存儲在var中的c的值。任何人都可以請在這種情況下幫助。

+2

儘管在上面提出的重複中使用了「string」這個詞,但它並不一定是一個字符串。重點是你只能從shell函數中返回一個無符號字節(0-255)。 – kojiro

回答

2

您使用的函數的「返回值」是stdout。 「返回」將設置退出狀態($?),您可能不會使用它。 「測試」可能是名稱的錯誤選擇,因爲它被採用(qv。man test)。 所以:

$ Test() { expr $1 + 10000; } 
$ var=$(Test 10) 
$ echo $var 
10010 
+0

謝謝:)其工作... 我不會使用測試作爲我的函數名稱。這只是一個例子,但是我的命名錯誤。 非常感謝:) – Praveen

2

如果你希望做的就是增加10000至您的輸入,然後一個功能是矯枉過正。爲此,這不工作?

your_arg=10 
var=$((${your_arg}+10000)) 
echo $var 
+0

舉個例子,我粘貼了這個簡單的代碼。我正在使用另一個函數將時間(HH:MM)轉換爲秒,並且這個函數被多次調用。 – Praveen

0

您的代碼中存在一些問題。

#!/bin/bash 

它的工作原理,但它是沒有好主意,定義一個名爲test功能,因爲test is a standard Unix program

test() 
{ 

寫入調試輸出到標準誤差(& 2)代替標準輸出(& 1)。標準輸出用於返回數據。

echo "$1" >&2 

用函數聲明變量local以避免副作用。

local c=$(expr "$1" + "10000") 

使用echo而不是return來返回字符串。 return只能返回整數。

echo "$c" 
} 

var=$(test 10) 

如果不確定總是引用參數。

echo "$var" >&2