这应该很容易回答,但我无法找到我在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会在开始下一个函数之前等待一个函数完成吗? - 我很确定答案是肯定的,但我有很多打字方式可以做任何一种方式,因为我无法在互联网上快速找到答案,我认为将这个答案发布为好。
谢谢!
答案 0 :(得分:3)
除非您在子shell中运行该函数,否则变量仍然存在。如果您将其作为管道的一部分运行,或者将其与(...)
分组,则会发生这种情况(如果您不想创建子shell,则应使用{ ... }
进行分组。
例外情况是,如果您使用declare
,typeset
或local
在函数中显式声明变量,这会使它们成为该函数的本地变量,而不是脚本的全局变量。但您也可以使用-g
选项declare
和typeset
来声明全局变量(这显然不适合local
声明)。
请参阅bash
中有关变量范围的tutorial。
命令全部按顺序运行,除非您故意在最后用&
对它们进行背景操作。在这方面,功能和其他命令之间没有区别。