Bash 功能顺序和时间

Bash Functions Order and Timing

这应该很容易回答,但我在 google/Whosebug 上找不到我要问的确切内容。

我有一个 bash 脚本,其中包含 18 个函数(785 行)- 太荒谬了,我知道我需要学习另一种语言来处理冗长的内容。我必须按特定顺序 运行 这些函数,因为序列中后面的函数使用来自数据库 and/or 文本文件的信息,这些文本文件被前面的函数修改过。我几乎已经完成了所有函数的核心功能,我想要一个函数来 运行 它们全部(一个环来统治它们!)。

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

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 是否会在开始下一个函数之前等待一个函数完成? - 我很确定答案是肯定的,但无论哪种方式我都需要打很多字,而且由于我无法在互联网上快速找到这个答案,我认为发布这个答案可能对其他人也有好处。

谢谢!

除非您 运行 子 shell 中的函数,否则变量会持续存在。如果你 运行 它作为管道的一部分,或者用 (...) 分组,就会发生这种情况(如果你不想创建子 shell,你应该使用 { ... } 而不是分组。

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

bash.

的变量作用域上看到这个 tutorial

命令都是 运行 顺序的,除非你故意在它们的末尾加上 & 作为背景。在这方面函数和其他命令没有区别。