[英]What is the 'function' keyword used in some bash scripts?
function foo() {}
我在info bash
进行搜索查询,并在POSIX的已重写章节中查找功能关键字,但未找到任何内容。
在某些bash脚本中使用的function
关键字是什么? 那是一些不赞成使用的语法吗?
如手册中所述,在Bash中定义函数时, function
关键字是可选的:
使用以下语法声明函数:
name () compound-command [ redirections ]
要么
function name [()] compound-command [ redirections ]
通常首选语法的第一种形式,因为它与Bourne / Korn / POSIX脚本兼容,因此更加可移植。
也就是说,有时您可能希望使用function
关键字来防止Bash 别名与您的函数名称冲突。 考虑以下示例:
$ alias foo="echo hi"
$ foo() { :; }
bash: syntax error near unexpected token `('
在这里, 'foo'
被同名别名的文本替换,因为它是命令的第一个单词 。 使用function
,别名不会扩展:
$ function foo() { :; }
在功能名称也是别名的极少数情况下,必须使用function
关键字。 没有它,Bash会在解析函数定义之前扩展别名-可能不是您想要的:
alias mycd=cd
mycd() { cd; ls; } # Alias expansion turns this into cd() { cd; ls; }
mycd # Fails. bash: mycd: command not found
cd # Uh oh, infinite recursion.
使用function
关键字,事情可以按预期运行:
alias mycd=cd
function mycd() { cd; ls; } # Defines a function named mycd, as expected.
cd # OK, goes to $HOME.
mycd # OK, goes to $HOME.
\mycd # OK, goes to $HOME, lists directory contents.
保留字function
是可选的。 请参见bash手册页中的“ Shell函数定义”部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.