Answers:
就像其他人说的那样,您不能那样做。
但是,如果要将代码安排到一个文件中,以便主程序位于文件的顶部,并且在下面定义了其他功能,则可以通过使用单独的main
功能来实现。
例如
#!/bin/sh
main() {
if [ "$1" = yes ]; then
do_task_this
else
do_task_that
fi
}
do_task_this() {
...
}
do_task_that() {
...
}
main "$@"; exit
当我们main
在文件末尾调用时,所有函数都已定义。要使脚本的命令行参数在函数中可见,需要显式传递"$@"
给main
。
exit
与main调用位于同一行的显式命令不是强制性的,但是如果修改了脚本文件,则可用于防止正在运行的脚本陷入混乱。没有它,shell将在main
返回后尝试继续从脚本文件读取命令。(请参阅如何在执行之前读取整个shell脚本?)
[[ ${BASH_SOURCE[0]} = "$0" ]] && Main "$@"
来调用main函数,这样我就可以在另一个脚本中获取Main
其源代码而无需执行。然后,我可以重用这些功能或编写测试来检查它们。
main "$@"; exit
(与exit
相同的行main
)还可以用作防止文件在被解释时被修改的保护措施。
exit
放在同一行,因为main
我们确保shell在main
返回后不会再从文件中读取任何内容,那么外壳需要在开始执行任何操作之前先读取所有内容。
main; exit
,main; exit $?
或者main <EOF>
,在所有情况下的退出代码main
作为脚本的退出代码。该exit
会只是为了防止事情越来越乱了,如果有人编辑,而它的运行脚本。
不,必须在使用函数之前声明它们。Shell脚本逐行读取并逐行执行;因此,函数必须在其声明执行后才存在。
C
它的舒适。
. yourfile
)。
if
函数外没有裸露的语句。声明if
-include函数时,不必在调用时定义该函数。
外壳没有declaring
功能的概念。因此,您不能有前向声明。
因此,您需要让外壳读取函数实现,然后才能调用它。
autoload f
声明函数,但其主体仅在第一次调用时加载)。但是,这不适用于OP bash
。