2013-10-09 43 views
2

这是参数化函数的正确语法吗?在bash中使用函数

#!/bin/bash 

twoPow() 
{ 
    prod=1 
    for((i=0;i<$1;i++)); 
    do 
     prod=$prod*2 
    done 
    return prod 
} 

echo "Enter a number" 
read num 
echo `twoPow $num` 

输出:

的bash sample.sh

输入一个数字

sample.sh:线10:返回:PROD:数值参数需要

第2部分: 我删除了返回,但如果我想多次运行并存储下面的结果,我应该怎么做。我该如何做这项工作?

#!/bin/bash 

tp1=1 
tp2=1 

twoPow() 
{ 
    for((i=0;i<$1;i++)); 
    do 
     $2=$(($prod*2)) 
    done 
} 

twoPow 3 tp1 
twoPow 2 tp2 
echo $tp1+$tp2 
+0

更改返回产品以回显$ prod并重新尝试。 REF:http://stackoverflow.com/questions/8742783/returning-value-from-called-function-in-shell-script –

回答

4

在bash脚本中,您无法将值返回给调用代码。

与其他语言一样,模拟“返回”值的最简单方法是将全局变量设置为预期结果。

幸运的是,在bash中,所有变量默认都是全局变量。在调用该函数后,请尝试输出prod的值。

+1

这工作: '#/斌/庆典 督促= 1 twoPow() { \t((i = 0; i <$ 1; i ++)); \t做 \t \t督促= $(($ PROD * 2)) \t做 } 回声 “输入号码” 读NUM twoPow $ NUM 回声$ prod' – codepk

+0

我应该怎么做,如果我想多次调用并存储结果? – codepk

0

示例Bash函数定义和调用几个参数和返回值,它可能是有用的,它的工作原理。

#!/bin/sh 

##Define fiunction 
function sum() 
{ 

val1=$1 

val2=$2 

val3=`expr $val1 + $val2` 

echo $val3 

} 

#Call function with 2 parameters and it return 1 parameter. 
ret_val=$(sum 10 20) 
echo $ret_val 
+0

算术不再需要'expr';使用'val3 = $((val1 + val2))'代替。 – chepner

+0

是的,那是真的:) –