函数(FUNCTIONS)
一个 shell 函数,以上面 SHELLGRAMMAR 中描述的方法定义,保存着一系列的命令,等待稍后执行。 当 shell 函数名作为一个简单命令名使用时,这个函数名关联的命令的序列 被执行。函数在当前 shell 的上下文环境中执行;不会创建新的进程来 解释它们 (这与 shell 脚本的执行形成了对比)。当执行函数时,函数 的参数成为执行过程中的位置参数 (positional parameters)。特殊参数 # 被更新以反映这个变化。位置参数 0 不会改变。函数执行时, FUNCNAME 变量被设置为函数的名称。函数和它的调用者在 shell 执行环境的所有 其他方面都是一样的,特殊情况是 DEBUG 陷阱 (参见下面对内建函数 trap 的描述,在 shell 内建命令(SHELL BUILTIN COMMANDS) 章节中) 不会被继承,除非函数设置了 trace 属性 (参见下面对内建函数 declare 的描述)。
函数中的局部变量可以使用内建命令 local 来声明。通常情况下,变量和它们的值在函数和它的调用者之间是共享的。
如果函数中执行了内建命令 return, 那么函数结束,执行从函数调用之后的下一个命令开始。 函数结束后,位置参数的值以及特殊参数 # 都将重置为它们在函数执行前的值。
函数名和定义可以使用内建命令 declare 或 typeset 加上 -f 参数来列出。如果在 declare 或 typeset 命令中使用 -F 选项将只列出函数名。函数可以使用内建命令 export 加上 -f 参数导出,使得子 shell 中它们被自动定义。
函数可以是递归的。对于递归调用的次数没有硬性限制。