这样声明的 bash 函数之间有什么行为差异吗:
function ql_release_lock () {}
以及一个没有参数的 bash 函数:
function ql_release_lock {}
通过行为差异,我想我的意思是我们应该注意的任何差异。
命令行后没有任何区别。生成的函数是相同的。
定义 shell 函数的唯一可移植语法省略了 function
关键字,这是一个 bashism:
q1_release_lock() { … }
注意:从技术上讲,函数定义的语法为:
fname "(" ")" compound-command
或
fname "(" ")" compound-command redirection-list
复合命令可以是分组,使用{ … }
或( … )
,也可以是for
、while
、case
、if
、case
或select
语句。我怀疑利用这一事实是否是一个好主意,可能fname () ( body )
除外,这表明函数的主体应该在子壳中运行。
无论如何,您可以观察到 bash 使用 fname () { … }
作为规范语法,方法是将函数定义与 declare -fp fname
一起转储。