在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
不符合POSIX
bash
source
定义为
的别名:它们在功能上是等效的。您好,在您的示例中,如何构造必须在foo/bar/baz之间共享的数据?通常我只是把它放在脚本的顶部。使用函数时仍然是这样吗?还是将全局数据放在main中,然后将其作为参数传递给foo/bar/baz更好?最好的做法是什么?我更喜欢争论。除此之外,我将在
main
main
之后的函数中设置全局变量(例如,
setup
parseArguments
)。我避免在
main
上面设置全局变量——代码不应该超出
main
的范围。这似乎有点类似于
如果在python中使用诸如测试脚本之类的工具时所做的事情,将所有内容分解为函数可以使测试单个组件更加容易。另见