我知道如何返回退出代码,但我想返回在shell脚本函数中完成的操作的结果,所以我最终可以在另一个脚本或函数中使用它。
像
这样的东西var1=$(myfunction)
function2 var1
myfunction可能是A + B = C
我查看了“return”,但它会返回一个代码,而不是一个值。
我正在查看显示如何编写函数的各种网站,但我看不出你是如何实际返回值的。
在C ++中,您将使用return“variable name”,但shell脚本不允许这样做。它表示变量不存在(这是逻辑的,它是在函数中创建的变量,因此当释放函数时,分配给它的内存空间消失了)。不能使用全局变量,因为函数可能在一个脚本中,而需要返回值的调用函数可能在另一个脚本中。
答案 0 :(得分:3)
myfunction可能类似于A + B = C
回显结果:
$ myfunction() { echo $(($1+$2)); }
以上myfunction
会添加两个数字并回显结果。
然后可以像您一样捕获返回值:
$ var=$(myfunction 12 5)
$ echo $var
17
构造var=$(myfunction)
从myfunction
中捕获标准并将其保存在var
中。因此,当您想要从myfunction
返回某些内容时,只需将其发送到标准内容,就像我们在上面的示例中使用echo
所做的那样。
如果您希望仔细格式化返回值,则应考虑使用printf
代替echo。
让我们定义一个产生两个输出的函数:
$ f() { echo "output1" ; echo "output2" ; }
$ f
output1
output2
如果你想单独取回这些值,最可靠的方法是使用bash的数组:
$ a=($(f))
以上内容通过f
执行$(f)
,并将结果保存在名为a
的数组中。我们可以使用a
:
declare -p
中的内容
$ declare -p a
declare -a a='([0]="output1" [1]="output2")'
答案 1 :(得分:3)
我使用相同的sorta方法将其他脚本的值返回到主脚本,如标题所示。
在第二个脚本的末尾,我回显要返回到主脚本的变量:
#!/bin/bash
# This is the Second Script.
# Store the variables passed from the main script:
VAR1_FROM_MAIN_SCRIPT=$1
VAR2_FROM_MAIN_SCRIPT=$2
# Add the 2 variables and store as another variable to return:
RETURN_THIS=$(($VAR1_FROM_MAIN_SCRIPT + VAR2_FROM_MAIN_SCRIPT))
# This is the variable you are sending back to the main script:
echo "$RETURN_THIS" #<---- This won't print to screen!!!
然后在主脚本中,我将几个变量传递给第二个脚本并执行,如下所示:
#!/bin/bash
# This is the Main Script.
PASS_VAR1_TO_SCRIPT=1
PASS_VAR2_TO_SCRIPT=2
# Call the second script and store it's results in this variable:
RETURN_VARIABLE=$(./secondScriptName "$PASS_VAR1_TO_SCRIPT" "$PASS_VAR2_TO_SCRIPT")
# Display the returned variable from the second script:
echo $RETURN_VARIABLE #<---- Will display 3
第二个脚本中的回显无法打印到屏幕上的原因是,因为它正在RETURN_VARIABLE的子外壳中运行该第二个脚本...我知道我对子外壳的解释很烂,但这不重要。 。
另外,我知道您可以提供其他脚本,但这可能会对其他人有所帮助。
答案 2 :(得分:2)
在shell脚本中,你不返回一个值,只是回显(打印)它,调用者将捕获脚本/函数的输出以获取返回的值。
示例:
dateval=$(date)
echo $dateval
Wed Apr 23 18:35:45 EDT 2014
您可以放置函数或shell脚本而不是date
。