是否使用parens声明bash函数之间的差异
这样声明的bash函数之间是否存在行为差异:是否使用parens声明bash函数之间的差异,bash,shell,Bash,Shell,这样声明的bash函数之间是否存在行为差异: function ql_release_lock () {} 以及一个没有paren的bash函数: function ql_release_lock {} 所谓行为差异,我想我指的是我们应该意识到的任何差异。在解析命令行之后,没有任何差异。结果函数是相同的 定义shell函数的唯一可移植语法省略了函数关键字,这是一种bashism: q1_release_lock() { … } 注:从技术上讲,函数定义的语法为: fname "(" ")
function ql_release_lock () {}
以及一个没有paren的bash函数:
function ql_release_lock {}
所谓行为差异,我想我指的是我们应该意识到的任何差异。在解析命令行之后,没有任何差异。结果函数是相同的 定义shell函数的唯一可移植语法省略了
函数
关键字,这是一种bashism:
q1_release_lock() { … }
注:从技术上讲,函数定义的语法为:
fname "(" ")" compound-command
或
复合命令可以是分组,使用{…}
或(…)
,也可以是for
,while
,case
,if
,case
或select
语句。我怀疑利用这一事实是否是一个好主意,除了fname()(body)
,它表明函数体应该在子shell中运行
在任何情况下,您都可以观察到bash使用
fname(){…}
作为规范语法,通过使用declare-fp fname
转储函数定义,在解析命令行后没有任何区别。结果函数是相同的
定义shell函数的唯一可移植语法省略了函数
关键字,这是一种bashism:
q1_release_lock() { … }
注:从技术上讲,函数定义的语法为:
fname "(" ")" compound-command
或
复合命令可以是分组,使用{…}
或(…)
,也可以是for
,while
,case
,if
,case
或select
语句。我怀疑利用这一事实是否是一个好主意,除了fname()(body)
,它表明函数体应该在子shell中运行
在任何情况下,您都可以观察到bash使用
fname(){…}
作为规范语法,方法是使用declare-fp fname转储函数定义,从而创建最可移植的bash函数,省略function
并使用parens?Correct;只有该变体与POSIX兼容。如果函数中有bashism,那么最好使用function关键字,以确保快速失败,也许?@userunknown,…如果您想要快速失败,那么显式地这样做是否更有意义?我通常的习惯用法是,case$BASH\u版本在…
前面;通过这种方式,我们可以为不正确的shell案例或旧版本案例提供明确的错误消息。@userunknown,…也有古老的ksh版本,其中允许使用函数
,但会更改函数内的代码行为(默认情况下使变量为局部变量)。因此,使用这种语法不仅会导致彻底的失败,而且会导致更普遍的未定义行为。明白了……因此,要创建最可移植的bash函数,请省略函数
,并使用parens?Correct;只有该变体与POSIX兼容。如果函数中有bashism,那么最好使用function关键字,以确保快速失败,也许?@userunknown,…如果您想要快速失败,那么显式地这样做是否更有意义?我通常的习惯用法是,case$BASH\u版本在…
前面;通过这种方式,我们可以为不正确的shell案例或旧版本案例提供明确的错误消息。@userunknown,…也有古老的ksh版本,其中允许使用函数
,但会更改函数内的代码行为(默认情况下使变量为局部变量)。因此,使用这种语法不仅会导致彻底的失败,还会导致更普遍的未定义行为。