bash
中是否有这样的东西,或者至少有类似的(解决方法),例如前向声明,例如在C / C++中众所周知?
或者有这样的事情,因为例如它总是一次执行(一行接一行)?
如果没有前向声明,我应该怎样做才能使我的脚本更易于阅读。它相当长,并且开头的这些函数定义与全局变量混合,使我的脚本看起来很难看并且难以阅读/理解)?我要求学习一些针对此类情况的众所周知/最佳实践。
例如:
# something like forward declaration
function func
# execution of the function
func
# definition of func
function func
{
echo 123
}
不,bash 没有前向函数声明。我的大多数脚本都使用这样的模式:
#!/bin/bash
main() {
foo
bar
baz
}
foo() {
}
bar() {
}
baz() {
}
main "$@"
你可以从上到下阅读代码,但直到最后一行它才真正开始执行。通过将
"$@"
传递给 main(),您可以像平常一样访问命令行参数 $1
、$2
等。
当我的 bash 脚本增长太多时,我使用包含机制:
文件
allMyFunctions
:
foo() {
}
bar() {
}
baz() {
}
文件
main
:
#!/bin/bash
. allMyfunctions
foo
bar
baz
您可以拥有脚本源部分:
#!/bin/bash
. <( sed -n '/^#SOURCE-BEGIN/,/^#SOURCE-END/{//!p;}' $0 )
greeting "$@"
foo hey
#SOURCE-BEGIN
greeting() {
for i in "$@"
do
echo ">[$i]"
done
}
foo() {
echo in foo
echo "arg passed in: $1"
}
#SOURCE-END
echo good bye
$ ./myscript.sh hello world "one string"
>[hello]
>[world]
>[one string]
in foo
arg passed in: hey
good bye
我使用进程替换 (
<(....)
) 来获取 sed
命令的输出。 sed
语法来自这里,搜索What about the classic sed solution?