我正在使用 FUNCNAME 数组变量,它为我们提供了各种执行函数的名称。在使用它的过程中,我发现了main
里面的函数${FUNCNAME[max_ind]}
。
main
这个函数在我们的 shell 脚本中定义在哪里?里面写了什么代码main
,如何使用?基本上这个函数的所有信息main
。
答案1
这是 shell 脚本的主要级别。
FUNCNAME
它本身似乎是 Bash 特有的,它的手册页是这样说的:
一个数组变量,包含当前执行调用堆栈中的所有 shell 函数的名称。索引为 0 的元素是任何当前正在执行的 shell 函数的名称。最底部的元素(索引最高的元素)是“main”。该变量仅在 shell 函数执行时存在。
这意味着它也可能会变得混乱,因为例如这个脚本:
#!/bin/bash
main() {
foo
}
foo() {
declare -p FUNCNAME;
}
main
会打印
declare -a FUNCNAME=([0]="foo" [1]="main" [2]="main")
即使这两个main
s 不是相同的功能。
请注意,显式创建一个名为 的函数并不是那么牵强main
。拥有专用的 main 函数可能有助于构建代码,因为主程序位于一个位置并且可能不会分散在其他函数定义之间的顶层的各处,因此阅读脚本可能会更容易。
还有一种习惯用法是将所有内容都放在函数中并main "$@"; exit
在主级别上调用,以确保如果脚本文件在执行过程中被修改,则不会影响正在运行的脚本。看:如何在执行shell脚本之前读取整个shell脚本?
我不知道为什么 Bash 选择在那里使用,而不是像Python 用于类似用途的main
更突出的东西。__main__