Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否使用parens声明bash函数之间的差异_Bash_Shell - Fatal编程技术网

是否使用parens声明bash函数之间的差异

是否使用parens声明bash函数之间的差异,bash,shell,Bash,Shell,这样声明的bash函数之间是否存在行为差异: function ql_release_lock () {} 以及一个没有paren的bash函数: function ql_release_lock {} 所谓行为差异,我想我指的是我们应该意识到的任何差异。在解析命令行之后,没有任何差异。结果函数是相同的 定义shell函数的唯一可移植语法省略了函数关键字,这是一种bashism: q1_release_lock() { … } 注:从技术上讲,函数定义的语法为: fname "(" ")

这样声明的bash函数之间是否存在行为差异:

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版本,其中允许使用
函数
,但会更改函数内的代码行为(默认情况下使变量为局部变量)。因此,使用这种语法不仅会导致彻底的失败,还会导致更普遍的未定义行为。