Bash函数顺序和时间

时间:2015-03-12 13:35:19

标签: bash function variables process

这应该很容易回答,但我无法找到我在google / stackoverflow上的确切要求。

我有一个包含18个函数的bash脚本(785行) - 荒谬,我知道我需要为冗长的东西学习另一种语言。我必须以特定的顺序运行这些函数,因为序列中的函数稍后使用来自数据库的信息和/或由前面的函数修改的文本文件。我几乎完成了所有功能的核心功能,我想要一个功能来运行它们(一个环来统治它们!)。

所以我的问题是,如果我有这样的功能:

function precious()
{
rings_of   #Functions in Sequence
elves      #This function Modifies DB
men        #This function uses DB to modify text
dwarves    #This function uses that modified text
}

如果这样声明,变量会从一个函数传递到下一个函数吗? (在函数内部):

function men()
{
...
frodo_sw_name=`some DB query returning the name of Frodo's sword`
...
}

另外,如果按特定顺序调用函数,如上所示,Bash会在开始下一个函数之前等待一个函数完成吗? - 我很确定答案是肯定的,但我有很多打字方式可以做任何一种方式,因为我无法在互联网上快速找到答案,我认为将这个答案发布为好。

谢谢!

1 个答案:

答案 0 :(得分:3)

除非您在子shell中运行该函数,否则变量仍然存在。如果您将其作为管道的一部分运行,或者将其与(...)分组,则会发生这种情况(如果您不想创建子shell,则应使用{ ... }进行分组。

例外情况是,如果您使用declaretypesetlocal在函数中显式声明变量,这会使它们成为该函数的本地变量,而不是脚本的全局变量。但您也可以使用-g选项declaretypeset来声明全局变量(这显然不适合local声明)。

请参阅bash中有关变量范围的tutorial

命令全部按顺序运行,除非您故意在最后用&对它们进行背景操作。在这方面,功能和其他命令之间没有区别。