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,你应该使用 { ... }
而不是分组。
例外情况是,如果您使用 declare
、typeset
或 local
在函数中显式声明变量,这会使它们成为该函数的局部变量而不是脚本的全局变量.但是你也可以使用 declare
和 typeset
的 -g
选项来声明全局变量(这显然不适合 local
声明)。
在 bash
.
的变量作用域上看到这个 tutorial
命令都是 运行 顺序的,除非你故意在它们的末尾加上 &
作为背景。在这方面函数和其他命令没有区别。
这应该很容易回答,但我在 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,你应该使用 { ... }
而不是分组。
例外情况是,如果您使用 declare
、typeset
或 local
在函数中显式声明变量,这会使它们成为该函数的局部变量而不是脚本的全局变量.但是你也可以使用 declare
和 typeset
的 -g
选项来声明全局变量(这显然不适合 local
声明)。
在 bash
.
命令都是 运行 顺序的,除非你故意在它们的末尾加上 &
作为背景。在这方面函数和其他命令没有区别。