bash - 我应该将 shell 函数定义为函数 x( ) 还是仅定义为 x( )?

标签 bash shell sh

我注意到有三种定义 shell 函数的方法,但我从未在任何地方看到它的解释。

# Option 1
function log(){

}

# Option 2
log(){

}

# Option 3, added due to answers
function log{

}

这三个定义之间有什么不同吗?它们的行为是否不同,还是只是外观不同?

有没有应该使用的标准?我希望第一个选项更可取,因为我想它会消除某处的歧义。

提前致谢!

回答后编辑:投票关闭的人都是“基于意见”;我问的是行为上的差异,而不仅仅是为什么人们认为我应该使用哪个。一个主要区别在于只有 Bash 支持一个,这意味着每个人都应该致力于使用第二个选项。

最佳答案

log() 

受 Bourne Shell 家族和任何类型的派生物(破折号、破折号)支持 是 POSIX std 语法,可能是您想用来编写与旧系统兼容的东西的语法。可能是您要使用的那个。

function log () { ...; }

被 bash 和 zsh 支持,但是同时使用 function () 是错误的,应该避免。

function log { ...; }

是 Korn Shell 语法,出于兼容性原因被 bash 和 zsh 支持,但不是 POSIX

引自 http://wiki.bash-hackers.org/scripting/obsolete关于“函数log()”

这是 Korn 和 POSIX 风格函数定义的合并——同时使用函数关键字和括号。它没有有用的目的,也没有历史依据或存在的理由。它不是由 POSIX 指定的。它被 Bash、mksh、zsh 和其他一些 Korn shell 所接受,在这些 shell 中它被视为与 POSIX 风格的函数相同。 AT&T ksh 不接受它。它不应该被使用。有关 function 关键字,请参见下表。 Bash 没有将此功能记录为明确弃用。

关于bash - 我应该将 shell 函数定义为函数 x( ) 还是仅定义为 x( )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22238033/

相关文章:

linux - 在不提示输入密码的情况下在脚本中创建一个 sudo 用户,在不中断脚本的情况下更改为用户

带有可与管道和 glob 配合使用的参数的 Bash 别名

bash - 替代 : cut -d <string>?

使用输出重定向 (<) 管道进行 MySQL 转储导入的 Python Sh 库

java - 从 CLI 运行 Java 工作正常,但从 SH 执行相同的不会让 Java 找到类

linux - 如何在不重启 Linux 服务器的情况下在 shell 脚本中重新加载环境变量

arrays - 如何在 BASH 的列中输出数组的内容

bash - 我们如何根据 unix 中的给定日期获取工作日

json - 从 JSON 文件中删除换行符、制表符和回车符等转义序列字符

linux - 如何让ec2实例长时间停止