2017-05-04 39 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 
相关问题