是否可以调用下面在 bash 中声明的函数?
例子
if [ "$input" = "yes" ]; then
YES_FUNCTION
elif [ "$input" = "no" ]; then
NO_FUNCTION
else
exit 0;
fi
YES_FUNCTION()
{
.....
.....
}
NO_FUNCTION()
{
.....
.....
}
是否可以调用下面在 bash 中声明的函数?
例子
if [ "$input" = "yes" ]; then
YES_FUNCTION
elif [ "$input" = "no" ]; then
NO_FUNCTION
else
exit 0;
fi
YES_FUNCTION()
{
.....
.....
}
NO_FUNCTION()
{
.....
.....
}
正如其他人所说,你不能那样做。
但是如果你想把代码安排到一个文件中,使主程序在文件的顶部,而其他函数在下面定义,你可以通过一个单独的
main
函数来实现。例如
当我们
main
在文件末尾调用时,所有函数都已定义。需要显式传递"$@"
tomain
才能使脚本的命令行参数在函数中可见。与 main 调用在同一行的显式
exit
不是强制性的,但可用于防止脚本文件被修改时正在运行的脚本变得混乱。main
没有它,shell 将在返回后尝试继续从脚本文件中读取命令。(请参阅如何在执行之前阅读整个 shell 脚本?)不,这些函数在调用它们时必须存在于 shell 环境中。
Google 的“Shell Style Guide”对此进行了修复:
在脚本的最后,毕竟函数,作为不在函数中的唯一语句,你会有
这将
main
使用脚本给出的任何参数调用该函数。该main
函数可以位于脚本的顶部(样式指南说将其放在底部,但话又说回来,它说了很多东西)。当 shell 进行
main
调用时,脚本中的所有函数都已被解析,因此可以从main
函数内部调用。不,函数必须在使用前声明。Shell 脚本逐行读取并逐行执行;所以一个函数在它的声明被执行之前是不存在的。
shell 没有
declaring
函数的概念。所以你不能有一个前向声明。因此,您需要让 shell 读取函数实现,然后才能调用它。