是否用括号声明的 bash 函数之间的区别



这样声明的 bash 函数之间有什么行为差异吗:

function ql_release_lock () {}

以及一个没有参数的 bash 函数:

function ql_release_lock {}

通过行为差异,我想我的意思是我们应该注意的任何差异。

解析

命令行后没有任何区别。生成的函数是相同的。

定义 shell 函数的唯一可移植语法省略了 function 关键字,这是一个 bashism:

q1_release_lock() { … }

注意:从技术上讲,函数定义的语法为:

fname "(" ")" compound-command 

fname "(" ")" compound-command redirection-list

复合命令可以是分组,使用{ … }( … ),也可以是forwhilecaseifcaseselect语句。我怀疑利用这一事实是否是一个好主意,可能fname () ( body )除外,这表明函数的主体应该在子壳中运行。

无论如何,您可以观察到 bash 使用 fname () { … } 作为规范语法,方法是将函数定义与 declare -fp fname 一起转储。

最新更新