从shell脚本返回一个值到另一个shell脚本

4 bash shell

我知道如何返回退出代码,但是我想返回在Shell脚本函数中完成的操作的结果,因此最终可以在另一个脚本或函数中使用它。

就像是

var1=$(myfunction)

function2 var1
Run Code Online (Sandbox Code Playgroud)

我的功能可能像A + B = C

我查看了“ return”,但它将返回一个代码,而不是一个值。

我正在研究显示如何编写函数的各种站点,但看不到如何实际返回值。

在C ++中,您将使用返回“变量名”,但是shell脚本不允许这样做。它说该变量不存在(这是逻辑上的,它是在函数中创建的变量,因此释放该函数时,分配给它的内存空间就消失了)。无法使用全局变量,因为该函数可能在一个脚本中,而需要返回值的调用函数可能在另一个脚本中。

Sla*_*jaw 6

正如标题所示,我使用相同的方法将其他脚本的值返回到我的主脚本。

在第二个脚本的末尾,我回显了我想要返回到主脚本的变量:

#!/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!!!
Run Code Online (Sandbox Code Playgroud)

然后在主脚本中,我将几个变量传递给第二个脚本并执行,如下所示:

#!/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
Run Code Online (Sandbox Code Playgroud)

第二个脚本中的 echo 不会打印到屏幕的原因是因为它在 RETURN_VARIABLE 的子 shell 中运行第二个脚本...我知道我对子 shell 的解释很糟糕,但这不是重点...
另外,我知道您可以获取其他脚本,但这可能对其他人有帮助。


Joh*_*024 5

myfunction可能类似于A + B = C

只是回显结果:

$ myfunction() { echo $(($1+$2)); }
Run Code Online (Sandbox Code Playgroud)

上面加myfunction了两个数字并回显结果。

然后可以像您一样捕获返回值:

$ var=$(myfunction 12 5)
$ echo $var
17
Run Code Online (Sandbox Code Playgroud)

构造var=$(myfunction)从中捕获标准myfunction并将其保存在中var。因此,当您想从中返回某些内容时myfunction,只需将其发送到standard即可,就像我们echo在上面的示例中所做的那样。

如果希望返回值的格式很仔细,则应考虑使用printfecho代替。

更多:如何返回多个值

让我们定义一个产生两个输出的函数:

$ f() { echo "output1" ; echo "output2" ; }
$ f
output1
output2
Run Code Online (Sandbox Code Playgroud)

如果要分别获取这些值,最可靠的方法是使用bash的数组:

$ a=($(f))
Run Code Online (Sandbox Code Playgroud)

上面的代码f通过执行,$(f)并将结果保存在名为的数组中a。我们可以a使用declare -p以下命令查看其中的内容:

$ declare -p a
declare -a a='([0]="output1" [1]="output2")'
Run Code Online (Sandbox Code Playgroud)