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

标签 bash shell

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

有点像

var1=$(myfunction)

function2 var1

myfunction 可以是 A+B=C 之类的东西

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

我正在查看展示如何编写函数的各种网站,但我没有看到您实际上是如何返回值的。

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

最佳答案

myfunction could be something like 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 的数组中。我们可以使用 declare -p 查看 a 中的内容:

$ declare -p a
declare -a a='([0]="output1" [1]="output2")'

关于bash - 从 shell 脚本返回一个值到另一个 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23256427/

相关文章:

linux - 更改 insead 循环 Bash 的变量值

shell - Aria2 工作初始化脚本

linux - 在 RHEL 6.4 上永久挂载 Netapp NFS 共享

mysql - 无法在 Mac 上启动 mysql 5.6

c - fd 泄漏,自定义 Shell

linux - 过滤 block

bash - curl : send html email with embedded image and attachment

bash - 一个接一个地运行命令,即使我暂停了第一个命令 (Ctrl-z)

linux - 从文本文件的每一行分配新变量

json - jq 不适用于带有破折号和数字的标签名称