在Bash或Shell脚本中转发函数声明? 在 BASH < />代码中有这样的事情,或者至少类似于(前后)类似的前向声明,例如C/C++中众所周知的?
或者有这样的事情,因为例如,它总是在一个过程中执行(一行接一行) 如果没有转发声明,我应该怎么做才能使脚本更易于阅读。它相当长,而且这些函数定义在开始时与全局变量混合在一起,使我的脚本看起来很难看,很难阅读/理解)?我要求了解此类案例的一些著名/最佳实践在Bash或Shell脚本中转发函数声明? 在 BASH < />代码中有这样的事情,或者至少类似于(前后)类似的前向声明,例如C/C++中众所周知的?,bash,function,sh,forward-declaration,Bash,Function,Sh,Forward Declaration,或者有这样的事情,因为例如,它总是在一个过程中执行(一行接一行) 如果没有转发声明,我应该怎么做才能使脚本更易于阅读。它相当长,而且这些函数定义在开始时与全局变量混合在一起,使我的脚本看起来很难看,很难阅读/理解)?我要求了解此类案例的一些著名/最佳实践 例如: # something like forward declaration function func # execution of the function func # definition of func function f
例如:
# something like forward declaration
function func
# execution of the function
func
# definition of func
function func
{
echo 123
}
好问题。我的大多数脚本都使用这样的模式:
#!/bin/bash
main() {
foo
bar
baz
}
foo() {
}
bar() {
}
baz() {
}
main "$@"
您可以从上到下读取代码,但直到最后一行代码才真正开始执行。通过将
“$@”
传递给main(),您可以像平常一样访问命令行参数$1
,$2
,等等。当我的bash脚本增长过多时,我会使用include机制:
文件allMyFunctions
:
foo() {
}
bar() {
}
baz() {
}
文件main
:
#!/bin/bash
. allMyfunctions
foo
bar
baz
就个人而言,当shell脚本开始超过一个文件时,我倾向于切换到另一种语言;-)使用
sourceallmyfunctions
不是更好吗?@pydoge:source
不符合POSIXbash
将source
定义为
的别名:它们在功能上是等效的。您好,在您的示例中,如何构造必须在foo/bar/baz之间共享的数据?通常我只是把它放在脚本的顶部。使用函数时仍然是这样吗?还是将全局数据放在main中,然后将其作为参数传递给foo/bar/baz更好?最好的做法是什么?我更喜欢争论。除此之外,我将在main
或main
之后的函数中设置全局变量(例如,setup
或parseArguments
)。我避免在main
上面设置全局变量——代码不应该超出main
的范围。这似乎有点类似于如果在python中使用诸如测试脚本之类的工具时所做的事情,将所有内容分解为函数可以使测试单个组件更加容易。另见